1. 项目概述与CPSW3核心价值
在嵌入式网络开发领域,尤其是工业控制、汽车网关或高性能通信设备中,网络交换芯片的底层配置能力直接决定了整个系统的实时性、可靠性和吞吐量。德州仪器(TI)的AM275x系列信号处理器集成的CPSW3(多端口以太网交换机)模块,就是一个典型的“硬件能力强大,但软件配置复杂”的代表。很多工程师拿到技术参考手册(TRM)时,面对动辄数百页的寄存器描述,往往感到无从下手,特别是那些涉及中断、流量管理和高级交换特性的部分。今天,我们就来深入拆解CPSW3中几个关键但常被误解的寄存器组,包括中断使能、交换机全局控制、流量整形和VLAN处理。我的目标不是照本宣科地翻译手册,而是结合我过去在工业交换机项目中的实际调试经验,告诉你这些寄存器背后的设计逻辑、配置时的“坑”,以及如何将它们组合起来解决真实的网络问题。无论你是正在评估AM275x平台,还是已经深陷于某个网络性能瓶颈的调试中,相信这篇对CPSW3寄存器的“庖丁解牛”都能给你带来直接的启发。
2. 中断管理寄存器组:从使能到状态查询的完整链路
中断是嵌入式系统实现高效事件驱动的核心。CPSW3的中断系统设计得比较规整,但理解其“使能-状态-清除”的完整工作流至关重要。很多新手会卡在“中断配置了为什么没触发”或者“中断触发了为什么清不掉”这类问题上。
2.1 中断使能与清除寄存器:一对关键的操作
你提供的资料中提到了CPSW3_INTD_ENABLE_REG_OUT_PULSE_0和CPSW3_INTD_ENABLE_CLR_REG_OUT_PULSE_0这一对寄存器。它们的偏移地址分别是0x1100和0x1300。从名字就能看出,这是一组“置位”和“清除”操作寄存器。
CPSW3_INTD_ENABLE_REG_OUT_PULSE_0(Offset 0x1100): 这是一个“写1置位”寄存器。它的三个有效位(Bit 2, 1, 0)分别对应三种不同类型的中断事件使能:STAT_PENDA(状态挂起)、MDIO_PENDA(MDIO管理接口挂起)和EVNT_PENDA(通用事件挂起)。当你向这些位写入1时,对应的中断使能位就会被置位,允许该类型中断信号产生并上报给CPU。CPSW3_INTD_ENABLE_CLR_REG_OUT_PULSE_0(Offset 0x1300): 这是一个“写1清除”寄存器。它的三个位与使能寄存器一一对应。当你需要禁用某个中断源时,不是向使能寄存器写0(通常写0无效),而是向这个清除寄存器的对应位写入1。
为什么这样设计?这是一种非常典型的“Set-and-Clear”寄存器设计模式,在TI的许多外设中都很常见。它的主要优势是原子性和安全性。在多任务或中断环境中,如果直接对一个可读写的使能位进行“读-改-写”操作,可能会被更高优先级的中断打断,导致状态错乱。而这种“写1置位/清除”的方式,单次写操作就是原子的,软件无需关中断就能安全操作。在配置时,我的习惯是先向清除寄存器写入全1(例如0x7),确保所有相关中断使能位处于已知的禁用状态,然后再根据需要,向使能寄存器写入特定的值来开启所需的中断源。
2.2 中断状态寄存器与向量寄存器
使能配置好后,当中断事件发生时,我们需要知道是哪个事件触发的。
CPSW3_INTD_STATUS_REG_OUT_PULSE_0(Offset 0x1500): 这是一个只读的状态寄存器。当中断事件发生时,对应的状态位(Bit 2, 1, 0)会被硬件自动置为1。这里有一个关键点:状态位的置位与中断使能位是独立的。即使你禁用了某个中断(使能位为0),当事件发生时,状态位依然可能被置1。这在你调试“幽灵中断”问题时非常有用——你可以通过读取状态寄存器,看到底是哪些事件实际发生了,哪怕它们当前没有被配置为产生中断信号。CPSW3_INTD_INTR_VECTOR_REG_OUT_PULSE(Offset 0x1A80): 这个32位只读寄存器提供了中断向量信息。当中断发生时,你可以读取这个寄存器,它可能包含了更详细的中断源编号或类型编码,用于在软件中快速索引到对应的中断服务程序(ISR)。具体向量值的含义需要结合CPSW3的中断映射表来解读,手册的其他章节通常会有详细说明。
中断处理的标准流程应该是:
- 中断发生:CPU跳转到CPSW3的通用中断服务程序。
- 读取状态寄存器:确定具体是哪个(或哪些)事件触发了本次中断。
- 处理事件:执行相应的业务逻辑(如读取统计数据、处理MDIO事务等)。
- 清除中断源:对于需要软件清除的中断,通常需要操作特定的“中断清除寄存器”(注意,不是状态寄存器,状态寄存器通常是只读的,由硬件自动置位/清除,或通过操作其他寄存器间接清除)。你提供的资料里没有直接给出这个清除寄存器,它通常位于中断控制器(INTC)模块或CPSW3的其他子模块中。
- 退出中断:清除中断挂起标志,返回主程序。
实操心得:在调试初期,我强烈建议在ISR中不仅打印状态寄存器的值,也打印一下使能寄存器的值。这能帮你快速确认是中断配置错了(使能位没开),还是事件确实没发生(状态位没置位),或者是中断清除逻辑有问题导致中断不断重入。这是定位中断相关问题的“三板斧”。
3. 交换机全局控制寄存器:功能开关与核心策略配置
如果说中断寄存器是系统的“神经系统”,那么CPSW3_CPSW_NU_CONTROL_REG(Offset 0x20004) 就是交换机的“大脑”和“总开关”。这个寄存器的配置决定了CPSW3的基础工作模式,任何一个bit的误解都可能带来意想不到的网络行为。
3.1 高级功能使能位解析
这个寄存器的31-16位集中了几个重要的全局功能开关:
- Bit 31 - ECC_CRC_MODE: 纠错码模式选择。这在需要高可靠性的场景下非常重要。设置为0时,ECC错误会体现在数据包头中;设置为1时,则体现在数据载荷中。选择哪种模式取决于你的上层协议栈更关注哪一部分数据的完整性。在普通以太网通信中,通常使用默认值0即可。
- Bit 19 - CUT_THRU_ENABLE:直通转发使能。这是影响交换机延迟的关键特性。Store-and-Forward(存储转发)模式会等整个帧接收完、校验CRC后再转发,延迟大但可靠性高。Cut-Through(直通)模式则在收到帧头、确定目标端口后立即开始转发,极大降低延迟,但可能转发错误帧。在工业实时以太网(如EtherCAT, PROFINET IRT)中,开启直通模式往往是必须的。注意:开启前需确保网络物理链路质量良好,且
CUT_THRESHOLD寄存器(后面会提到)配置合理。 - Bit 18 - EST_ENABLE:增强型调度流量使能。这是用于支持时间敏感网络(TSN)中802.1Qbv时间感知整形器(TAS)的关键功能。如果你需要实现精确的、基于时间门的流量调度(例如确保某条流量在特定的微秒时间窗口内独占带宽),就必须开启此功能,并配合复杂的门控列表(Gate Control List)进行配置。普通网络应用可以关闭。
- Bit 17 - IET_ENABLE:交错快速流量使能。这也是TSN特性(802.1Qbu & 802.3br),用于支持帧抢占(Frame Preemption)。允许高优先级帧打断正在传输的低优先级长帧,从而保证关键流量的超低延迟。与EST配合使用,可以构建强大的确定性网络。
- Bit 16 - EEE_ENABLE:节能以太网使能。在链���空闲时降低功耗,适合对功耗敏感的设备。但要注意,EEE的唤醒过程会引入额外的延迟,在对实时性要求严苛的场景下需要评估其影响。
3.2 端口行为与VLAN处理配置
寄存器的低16位主要控制端口0(CPPI主机端口)的行为和各端口的VLAN处理策略:
- Port 0相关控制 (Bit 15, 14, 13, 12): 这些位控制着CPPI端口(即CPU与交换机之间的数据通道)的细节行为。
P0_RX_PASS_CRC_ERR:是否转发CRC错误的帧。强烈建议保持默认值0(丢弃),除非你有特殊的诊断需求。转发错误帧会浪费总线带宽和CPU资源。P0_RX_PAD:是否对短帧进行填充至64字节。这关系到协议兼容性,某些老旧设备或特定协议可能要求最小帧长。P0_TX_CRC_REMOVE:发送时是否移除CRC。通常由MAC层添加CRC,所以这里一般设为0(不移除)。P0_TX_CRC_TYPE:选择CRC类型,根据网络标准选择。
- 优先级标签处理 (Bit 11-3, 1): 这一组
Px_PASS_PRI_TAGGED位(x从8到0)控制着每个端口对“优先级标记帧”的处理方式。优先级标记帧是一种特殊的VLAN帧,其VLAN ID(VID)为0。当该位为0时(默认),交换机会用该端口的默认VLAN ID(Px_PORT_VLAN寄存器配置)替换这个0值。当该位为1时,则保持VID为0不变。这个配置需要与你网络的VLAN规划紧密结合。在大多数企业VLAN部署中,我们通常设置为0,将无标签或优先级标记的流量划入端口的默认VLAN。 - 核心使能与模式 (Bit 2, 1, 0):
P0_ENABLE:CPPI端口总使能。这是交换机数据通路的终极开关,必须在所有端口和流量策略配置完成后再置1。VLAN_AWARE:VLAN感知模式。必须置1,交换机才能识别和处理VLAN标签,进行基于VLAN的转发、过滤。S_CN_SWITCH:服务或客户VLAN模式。这涉及到Q-in-Q(双层VLAN标签)处理。设置为0表示处理内层VLAN标签(客户侧),设置为1表示处理外层VLAN标签(服务提供商侧)。在简单的单层VLAN网络中,此位通常为0。
避坑指南:配置这个寄存器时,一个常见的错误是顺序不对。正确的顺序应该是:先配置所有端口和VLAN参数,最后再打开
P0_ENABLE和VLAN_AWARE。如果先打开了使能,交换机可能已经开始用默认或随机参数转发数据,导致网络环路或安全漏洞。另外,在修改CUT_THRU_ENABLE、EST_ENABLE等高级功能时,最好先将P0_ENABLE置0,修改完成后再重新使能,避免交换机在模式切换过程中出现不可预测的行为。
4. 流量管理与服务质量(QoS)寄存器详解
在复杂的网络环境中,不同业务流对带宽、延迟和抖动的需求是不同的。CPSW3提供了一套从基础统计到高级优先级流量控制(PFC)的完整流量管理寄存器。
4.1 端口统计与优先级类型
CPSW3_CPSW_NU_STAT_PORT_EN_REG(Offset 0x20014): 端口统计使能寄存器。它的每个bit对应一个物理端口或逻辑端口(P0-P8)的统计计数器使能。这是一个非常实用但常被忽略的功能。只有使能了对应端口的统计,你才能通过读取后续的统计计数器寄存器(如接收/发送字节数、帧数、错误计数等)来监控网络健康状况、定位丢包位置。在调试初期,我就习惯性地把所有需要监控的端口统计全部打开。CPSW3_CPSW_NU_PTYPE_REG(Offset 0x20018): 端口优先级类型寄存器。它控制每个端口的调度策略是“固定优先级”还是“逐级提升优先级”。Px_PTYPE_ESC = 0:固定优先级。端口上8个优先级队列严格按照0(最高)到7(最低)的优先级顺序发送。高优先级队列会“饿死”低优先级队列。Px_PTYPE_ESC = 1:逐级提升优先级。这是为了防止低优先级流量完全得不到服务。ESC_PRI_LD_VAL字段定义了“权重”。例如,如果设置为5,意味着每发送5个高优先级帧后,就必须允许发送1个下一优先级的帧。这是一种简单的加权公平队列(WFQ)的硬件实现,对于混合关键性流量的网络非常有用。
4.2 吞吐率、空闲与高级流量控制
CPSW3_CPSW_NU_THRU_RATE_REG(Offset 0x20020): 吞吐率寄存器。它定义了从以太网端口到交换矩阵(SL_RX_THRU_RATE)以及从CPPI端口到交换矩阵(P0_RX_THRU_RATE)的内部带宽限制。手册明确标注“用户不应更改”。这些值通常由硬件设计(时钟频率、总线宽度)决定,用于内部流量整形,防止背压。我们理解它的存在即可,一般无需改动。CPSW3_CPSW_NU_SOFT_IDLE_REG(Offset 0x2001C): 软件空闲寄存器。将SOFT_IDLE置1可以让CPPI端口(Port 0)进入软件空闲状态,停止从端口0-4卸载数据包。这在系统低功耗模式切换、或进行固件安全升级时非常有用,可以优雅地暂停数据平面业务,而不影响控制平面。CPSW3_CPSW_NU_GAP_THRESH_REG(Offset 0x20024): 短间隔阈值寄存器。用于控制发送帧之间的IFG(帧间间隙)。调整此值可以微调发送行为,以适应某些特殊的物理层或链路伙伴要求,但一般情况下使用默认值即可。
4.3 基于优先级的流量控制(PFC)阈值配置
你提供的资料中,从CPSW3_CPSW_NU_TX_G_OFLOW_THRESH_SET_REG(Offset 0x20030) 开始,是一组非常重要的PFC相关阈值寄存器。PFC是IEEE 802.1Qbb标准,允许接收方基于8个优先级队列分别向发送方发送“暂停帧”,从而实现更精细的流量控制,避免单一优先级队列的拥塞阻塞其他优先级队列。
这组寄存器采用了“Set”和“Clear”配对的设计,与中断使能寄存器类似,确保了配置的原子性。它们分为两类:
全局流出阈值(Global Outflow Threshold):
TX_G_OFLOW_THRESH_SET_REG/TX_G_OFLOW_THRESH_CLR_REG: 这组寄存器为每个优先级(Pri0-Pri7)设置一个4位的阈值。这个阈值代表的是“流出缓冲区”的使用量。当某个优先级的流出缓冲区使用量超过其设定阈值时,CPSW3会针对该优先级生成一个PFC暂停帧(Pause Frame)发送给上行链路,请求对方暂停发送该优先级的数据。设置较低的阈值意味着更早地触发流控,有利于降低延迟但可能牺牲吞吐量;较高的阈值则相反。
全局缓冲区阈值(Global Buffer Threshold):
TX_G_BUF_THRESH_SET_L_REG/TX_G_BUF_THRESH_CLR_L_REG(用于Pri0-Pri3)TX_G_BUF_THRESH_SET_H_REG/TX_G_BUF_THRESH_CLR_H_REG(用于Pri4-Pri7)- 这组寄存器为每个优先级设置一个8位的阈值,代表的是“全局共享缓冲区”的使用量。这是更严格的第二道防线。当某个优先级的流量不仅占满了自己的流出缓冲区,还开始侵占全局共享缓冲区并达到此阈值时,也会触发PFC。
配置策略:PFC阈值的配置需要根据你的网络流量模型进行仔细权衡。一个典型的策略是:
- 为最高优先级(如Pri7,用于语音或控制命令)设置较低的流出和缓冲区阈值,确保其稍有拥塞苗头就立刻流控,保证绝对的低延迟。
- 为中等优先级(如Pri4-Pri6,用于视频或关键数据)设置中等阈值,平衡延迟和吞吐。
- 为尽力而为优先级���Pri0-Pri3)设置较高的阈值,甚至可以考虑关闭其PFC,让它们在网络拥塞时丢包,避免流控帧泛洪。
经验之谈:PFC配置不当是导致网络性能下降甚至“活锁”的常见原因。如果所有优先级的阈值都设得太激进,会导致网络中PFC暂停帧泛滥,所有设备都在“暂停-等待-恢复”的循环中,实际吞吐量急剧下降。我的建议是,初期可以先采用保守配置,只对最关键的一两个优先级开启PFC并设置较敏感的阈值,观察效果后再逐步调整。务必使用
CPSW3_CPSW_NU_STAT_PORT_EN_REG开启统计,并监控PFC帧的发送和接收计数器,这是评估PFC效果的直接依据。
5. VLAN、EST与杂项寄存器配置要点
除了核心的交换和流控,CPSW3还有一些寄存器用于配置特定协议和功能。
5.1 VLAN标签类型识别
CPSW3_CPSW_NU_VLAN_LTYPE_REG(Offset 0x20050): VLAN长度/类型寄存器。这个寄存器告诉交换机如何识别VLAN帧。其复位值0x88A88100非常经典:VLAN_LTYPE_OUTER = 0x88A8: 这是IEEE 802.1Q VLAN标签的标准以太网类型(EtherType)。用于识别最外层的VLAN标签。VLAN_LTYPE_INNER = 0x8100: 这也是一个标准的VLAN EtherType。在Q-in-Q(双层标签)场景下,内层标签通常使用这个值。- 除非你的网络使用非标准的、私有的VLAN EtherType,否则绝对不要修改这个寄存器。修改后交换机将无法识别标准的VLAN帧,导致VLAN功能完全失效。
5.2 增强型调度流量(EST)与直通阈值
CPSW3_CPSW_NU_EST_TS_DOMAIN_REG(Offset 0x20054): EST时间戳域寄存器。当启用EST(EST_ENABLE=1)时,CPSW3会生成时间戳事件发送给系统的CPTS(时间戳模块)。这个寄存器的值EST_TS_DOMAIN就作为这些事件的“域”标识符,帮助CPTS区分来自不同模块的时间戳事件。在复杂系统中,如果存在多个时间戳源,合理分配不同的域ID很重要。CPSW3_CPSW_NU_CUT_THRESHOLD_REG(Offset 0x20058): 直通转发阈值寄存器。这个4位的CUT_THRESH值定义了在Cut-Through模式下,交换机需要接收多少字节的帧头后,才能开始做出转发决策。手册再次强调“软件不应更改”。这个值通常由硬件根据数据路径的流水线深度和地址查找时间精确计算得出,以保证在开始转发时,目的端口已经确定且不会转发错误帧。
5.3 频率与节能配置
CPSW3_CPSW_NU_FREQUENCY_REG(Offset 0x2005C): 频率寄存器。这个寄存器需要软件根据实际系统时钟(VBUSP_GCLK)的频率(以MHz为单位)进行配置。它用于Cut-Through模式下的自动速度检测。这是一个必须正确配置的寄存器!如果频率值设置错误,Cut-Through的时序计算会出错,可能导致数据损坏。通常在系统初始化阶段,从时钟配置模块获取准确的频率值并写入此寄存器。CPSW3_CPSW_NU_EEE_PRESCALE_REG(Offset 0x2002C): 节能以太网预分频寄存器。当EEE_ENABLE=1时,这个12位的预分频值用于计算EEE低功耗模式的唤醒时间等参数。需要根据连接的PHY芯片支持和链路协商结果来配置,具体值需参考PHY数据手册和EEE协议规范。
6. 寄存器编程实战与调试技巧
理解了每个寄存器的含义后,如何将它们组织起来,形成有效的配置序列,才是工程实践的关键。
6.1 配置序列与最佳实践
一个稳健的CPSW3初始化序列大致如下,请务必遵循此顺序以避免硬件处于不确定状态:
- 关闭数据通路:首先,确保
CPSW_NU_CONTROL_REG中的P0_ENABLE位为0。如果是从未知状态恢复,也可以先写SOFT_IDLE_REG强制进入空闲。 - 配置基础参数:
- 写入
FREQUENCY_REG,设置正确的核心频率。 - 配置
VLAN_LTYPE_REG(通常保持默认)。 - 根据网络规划,配置各端口的默认VLAN ID(
Px_PORT_VLAN寄存器,资料中未给出但非常重要)。
- 写入
- 配置VLAN与端口行为:
- 在
CONTROL_REG中设置各端口的Px_PASS_PRI_TAGGED策略。 - 设置
VLAN_AWARE和S_CN_SWITCH模式。 - 配置Port 0的CRC、短帧处理策略(
P0_RX_PASS_CRC_ERR,P0_RX_PAD等)。
- 在
- 配置流量管理与QoS:
- 在
STAT_PORT_EN_REG中使能需要监控的端口统计。 - 在
PTYPE_REG中为各端口选择优先级调度策略(固定或逐级提升),并设置ESC_PRI_LD_VAL。 - 精细调整PFC阈值寄存器(
TX_G_OFLOW_THRESH_SET_REG,TX_G_BUF_THRESH_SET_L/H_REG)。初始调试可先全部设为默认值或关闭。
- 在
- 配置高级功能:
- 如果需要,配置
EST_TS_DOMAIN_REG。 - 根据需求决定是否开启
CUT_THRU_ENABLE,EST_ENABLE,IET_ENABLE,EEE_ENABLE。注意,开启EST/IET需要大量额外的门控列表和队列配置,远超这几个使能位本身。
- 如果需要,配置
- 配置中断:
- 向
INTD_ENABLE_CLR_REG_OUT_PULSE_0写入0x7清除所有旧的中断使能。 - 向
INTD_ENABLE_REG_OUT_PULSE_0写入所需值,使能特定中断源。 - 在系统中断控制器中配置好CPSW3的中断线映射和优先级。
- 向
- 最后使能数据通路:将
CONTROL_REG中的P0_ENABLE位置1。此时,交换机应开始按照配置工作。
6.2 调试诊断与常见问题排查
即使按照最佳实践配置,网络问题依然可能出现。下面是一个基于寄存器诊断的排查思路表:
| 现象 | 可能原因 | 排查方法(查看相关寄存器或操作) |
|---|---|---|
| 端口无链路 | PHY未初始化或故障;MAC配置错误(非CPSW问题) | 1. 检查MDIO总线能否访问PHY。2. 检查MAC层的配置(如Auto-negotiation)。 |
| 链路已通但无数据 | CPPI端口未使能;VLAN过滤丢弃 | 1. 确认CONTROL_REG的P0_ENABLE=1。2. 检查发送/接收端口的VLAN成员关系,确认帧的VLAN ID是否被允许通过。 3. 尝试将 VLAN_AWARE临时置0,测试基本转发。 |
| 只能收不能发(或反之) | 方向性的流控(如PFC)激活;缓冲区阈值设置不当 | 1. 读取统计寄存器,查看发送/接收错误计数。 2. 检查PFC相关状态寄存器,看是否有优先级被暂停。 3. 临时调高或禁用PFC阈值测试。 |
| 网络延迟大且不稳定 | Cut-Through未开启;EST/IET配置冲突;后台干扰 | 1. 确认CUT_THRU_ENABLE=1。2. 如果未使用TSN,确保 EST_ENABLE和IET_ENABLE=0。3. 检查是否有其他高优先级任务或中断长时间阻塞网络服务。 |
| 特定优先级流量丢包严重 | 该优先级PFC阈值过低;队列权重配置不公 | 1. 查看该优先级的PFC触发统计。 2. 调整 PTYPE_REG的调度策略,或增加ESC_PRI_LD_VAL让低优先级也能得到服务。3. 检查该优先级队列的缓冲区大小分配(相关寄存器可能在资料未提供的部分)。 |
| 中断无法触发 | 中断未使能;状态位未置位;中断未清除 | 1. 对比INTD_ENABLE_REG和INTD_STATUS_REG,确认使能位已开且状态位已置。2. 检查系统中断控制器(INTC)的配置,确认CPSW3中断线已映射且使能。 3. 在ISR中读取状态寄存器后,必须按照手册流程清除中断源(可能需写其他特定寄存器)。 |
| 系统运行一段时间后死机或异常 | 寄存器配置被意外修改;DMA描述符溢出 | 1. 定期(或异常时)dump关键控制寄存器的值,与初始配置对比。 2. 检查CPPI描述符环的维护是否正确,是否有描述符未被释放导致DMA停滞。 |
一个高级调试技巧:利用软件空闲(SOFT_IDLE)。当网络出现严重异常、数据平面失控时,可以尝试在调试器中手动将SOFT_IDLE_REG的SOFT_IDLE位置1。这会���即冻结CPPI端口的数据流,让你有机会安全地检查各个队列状态、统计计数器和描述符,而不会让新的数据包覆盖现场。检查完毕后,再清除该位恢复流量。
7. 总结与进阶思考
通过对CPSW3这一系列核心寄存器的梳理,我们可以看到,一个现代嵌入式交换机的软件配置是一个多层次、精细化的系统工程。从最底层的中断开关,到交换策略、VLAN处理,再到高级的QoS和TSN特性,每一层都需要开发者透彻理解其原理并做出恰当的选择。
寄存器手册是地图,但实际项目中的网络需求才是导航的目标。我的建议是,在项目初期,不要试图一次性启用所有高级功能。先从最基本的二层转发、VLAN隔离开始,确保数据通路畅通。然后,根据需要逐步引入流量统计、PFC流控。对于EST/IET这样的TSN特性,更要搭建专门的测试环境,进行充分的线速和延迟测试。
最后,记住寄存器配置是“状态”。在实现动态配置(如热插拔VLAN、更改QoS策略)时,务必考虑状态切换的原子性和安全性,必要时利用SOFT_IDLE或先禁用端口再修改的策略。AM275x的CPSW3是一个功能强大的工具,掌握其寄存器编程,你就能为嵌入式设备打造出兼具高性能和高确定性的网络核心。