嵌入式系统复位配置详解:以MSC8251为例解析RCW加载与启动流程
1. 项目概述为什么复位配置是嵌入式系统的“第一道门”搞嵌入式开发尤其是做底层驱动或者系统移植的兄弟对“复位配置”这个词肯定不陌生。但很多时候我们可能只是照着参考设计把几个电阻焊上或者把EEPROM里的数据烧写好知其然却不知其所以然。今天我就以飞思卡尔现恩智浦的MSC8251这颗多核DSP为例把复位配置这块硬骨头彻底啃透。这不仅仅是MSC8251的知识其设计思想和流程在很多高性能处理器尤其是网络处理器和通信DSP上都有共通之处。简单来说复位配置就是芯片上电或复位后在正式执行第一条用户代码之前必须完成的一次“硬件初始化设定”。你可以把它想象成电脑开机时进入BIOS设置。在这个阶段芯片需要知道我该用哪个时钟源我的高速串行接口SerDes是跑PCIe还是RapidIO我的设备ID是多少我是系统里的主设备还是从设备这些问题的答案就存储在“复位配置字”Reset Configuration Words, RCW里。MSC8251提供了多种灵活的RCW加载方式从最简单的硬件引脚拉高拉低到通过I2C EEPROM存储复杂配置再到使用内部硬编码的默认值适应了从成本敏感型到高复杂度系统的不同需求。理解这个过程价值巨大。首先它是系统能正常启动的基石配置错了芯片可能“醒不过来”或者外设工作异常。其次它是性能调优的起点比如SerDes的参考时钟频率选对了高速接口的稳定性才有保障。最后在调试启动失败、分析复位源时相关的状态寄存器如RSR是定位问题的关键线索。接下来我们就从整体设计思路开始一步步拆解MSC8251的复位配置机制。2. 复位配置的整体设计与思路拆解MSC8251的复位配置流程本质上是一个由硬件自动执行的、多阶段的初始化过程。其核心目标是在软件介入之前为芯片的各个关键子系统如时钟、SerDes、Boot ROM、内存控制器等设定好一个确定的、可工作的初始状态。2.1 复位信号与配置时序要理解配置流程得先搞清楚芯片的复位信号。MSC8251主要有三种复位信号PORESET (Power-On Reset)上电复位是最根本的复位。当电源稳定后这个信号被释放Deassert标志着复位配置阶段的开始。HRESET (Hard Reset)硬复位。在PORESET释放后芯片内部开始执行RCW的加载和解析。只有当所有配置字被成功加载并应用后HRESET才会被释放。SRESET (Soft Reset)软复位。它在HRESET释放之后再过一段时间21或36个CLKIN周期才释放。软复位通常不影响已经加载的RCW配置主要用于复位处理器内核和部分外设让软件可以开始执行。这里有个关键的时间概念复位序列时长。它指的是从PORESET释放到HRESET释放之间的时间间隔以外部输入时钟CLKIN的周期数来衡量。这个时长直接取决于你选择的RCW加载源。手册里的表格给出了明确数据如果从I2C EEPROM加载RCW_SRC[0-2] 001 或 010在66MHz CLKIN下这个时长约为3.866毫秒在100MHz下约为2.552毫秒。时间较长因为需要完成I2C总线上的数据读取。如果从外部引脚加载RCW_SRC[0-2] 000或使用硬编码配置RCW_SRC[0-2] 100 或 101时长则短得多在66MHz下约为0.264毫秒100MHz下约为0.174毫秒。实操心得这个时间差在系统设计时需要考虑。如果你的应用对启动时间极其敏感应优先选择引脚配置或硬编码方式。如果配置复杂且需要灵活性则只能接受I2C EEPROM带来的额外启动延时。在设计看门狗或上电时序电路时也要确保预留足够的时间窗口等待HRESET信号有效。2.2 RCW加载源的选择逻辑MSC8251通过三个输入引脚RCW_SRC[0-2]的电平状态来决定从哪里获取RCW。这是一个典型的“三板斧”设计兼顾了灵活性、成本和复杂度。I2C EEPROM (001/010)这是最灵活、最常用的方式。将完整的64位RCW甚至更多配置数据存储在外部的I2C EEPROM中。芯片在上电时会通过其内置的I2C Boot Sequencer引导序列器自动从指定地址读取数据。001和010的区别在于EEPROM的寻址模式8位或16位。这种方式允许在板卡生产后通过更新EEPROM内容来修改启动配置无需改动硬件非常适合需要批量部署且可能后期升级的场合。它还支持多设备启动即一个主设备读取配置后再模拟EEPROM为其他从设备提供配置这对于多DSP板卡系统非常有用。外部引脚配置复用引脚加载 (000)这是最“硬核”的方式。芯片的64位RCW被分成4组Lane每组16位通过RC[15:0]这16个引脚在4个由RCW_LSEL[0-3]信号控制的时序窗口内依次锁存进来。这种方式速度最快但需要占用大量引脚并且配置一旦焊接就无法更改适用于配置固定、成本压力大、引脚资源不紧张的设计。简化引脚加载 (011)这是一种折中方案。只有部分关键的RCW位如SerDes协议、时钟模式、设备ID等通过外部引脚RC[21:0]中的一部分输入其余位采用芯片内部预定义的硬编码值。它比复用引脚方式占用引脚少又比纯硬编码方式多一些灵活性比如可以在板卡上通过跳线选择不同的SerDes参考时钟。内部硬编码配置 (100/101)这是最简单的“开箱即用”模式。芯片内部固化了两套默认的RCW值对应100和101。开发者无需连接任何外部EEPROM或配置电阻芯片上电即按照默认配置启动。这两套配置通常设定为最通用的场景例如使能两个RGMII千兆网口、将SerDes配置为特定模式的RapidIO等。这种方式成本最低但灵活性也最差仅适用于原型验证或配置需求极其固定的产品。设计考量选择哪种方式是硬件工程师在画原理图阶段就必须做出的关键决策。你需要权衡灵活性需求后期是否需要修改、成本约束是否需要外挂EEPROM芯片、PCB空间与布线复杂度能否接受大量配置引脚、以及启动时间要求。对于大多数复杂的通信设备I2C EEPROM方案是主流选择。3. 核心细节解析与实操要点理解了整体框架我们深入到每种加载方式的细节里这里面的“坑”和技巧最多。3.1 I2C EEPROM加载模式详解当你选择RCW_SRC[0-2]001或010时就进入了I2C EEPROM模式。此时MSC8251内部的I2C模块会以一个特殊的“引导序列器”模式工作。3.1.1 EEPROM数据格式不容出错的“密码本”芯片对EEPROM里的数据格式有严格规定写错了就会导致加载失败芯片“卡死”在复位状态。格式必须如下字节顺序内容值说明0-2前导码 (Preamble)0xAA, 0x55, 0xAA必须严格匹配。芯片靠这个来同步和确认EEPROM响应。3-5RCW 低字 (RCWLR) 保留字节0xFF, 0xFF, 0xFF每个配置字的前3字节是保留的必须填充为0xFF。6-9RCW 低字 (RCWLR) 数据用户定义这4个字节才是有效的RCW低32位配置数据。10-12RCW 高字 (RCWHR) 保留字节0xFF, 0xFF, 0xFF同上必须为0xFF。13-16RCW 高字 (RCWHR) 数据用户定义这4个字节是有效的RCW高32位配置数据关键点字节序MSC8251采用大端序。这意味着如果你用C语言定义了一个32位的变量uint32_t rcwlr 0x12345678;并将其写入EEPROM那么在EEPROM的地址偏移6-9处字节顺序应该是0x12, 0x34, 0x56, 0x78从高到低。很多新手在这里栽跟头用默认的小端序工具写入导致配置错误。地址与从机选择主设备Reset Master使用I2C从机地址0b1010000(0x50) 来寻址EEPROM。从设备Reset Slave则期望从地址0b1010111(0x57) 读取数据。这意味着如果你的EEPROM支持地址引脚配置在单设备系统中EEPROM的地址引脚必须接地使其响应0x50。在多设备系统中EEPROM本身响应0x50而主设备会模拟一个地址为0x57的“虚拟EEPROM”为从设备服务。3.1.2 单设备与多设备启动流程单设备最简单。STOP_BS引脚在复位期间保持低电平芯片将自己识别为主设备直接去读挂在I2C总线上的、地址为0x50的EEPROM。多设备这是设计难点也是体现MSC8251灵活性的地方。系统中有且仅有一个主设备其余均为从设备。硬件连接所有设备的RCW_SRC引脚配置必须相同。主设备的STOP_BS接低电平所有从设备的STOP_BS需要通过上拉电阻接高电平。主设备的STOP_BS是一个双向引脚在初始阶段为输入被拉低在后续阶段它会作为输出用来控制从设备。三阶段启动阶段一主设备读取自己的RCW。此时从设备的I2C控制器被强制保持在空闲状态。阶段二主设备启动后运行其内部引导代码。这段代码需要主动去EEPROM中读取所有从设备的RCW并存储在内存中。阶段三主设备将其I2C控制器配置为从机模式模拟一个地址为0x57的EEPROM。然后它按照预定的顺序依次释放拉高再拉低对应从设备的STOP_BS信号。每个被释放的从设备会醒来尝试从0x57地址读取RCW实际上是从主设备那里获取配置。主设备需要根据从设备的连接顺序依次提供对应的RCW数据。避坑指南上拉电阻从设备的STOP_BS引脚内部可能有弱上拉但为了确保复位期间的稳定高电平强烈建议在PCB上添加外部上拉电阻例如10kΩ。参考数据手册获取推荐值。总线冲突在引导序列器工作期间即HRESET释放前I2C总线上绝对不能有其他通信活动。确保与EEPROM挂在同一I2C总线上的其他器件如传感器、GPIO扩展芯片在此时处于高阻态或未被使能。加载失败处理如果EEPROM数据格式错误、I2C通信失败如EEPROM未响应芯片会检测到“引导序列器失败”并置位RSR寄存器的BSF位同时将HRESET保持为低芯片“挂死”。唯一的恢复方法是重新断言PORESET至少100微秒触发一次完整的重新上电复位流程。在设计复位电路时要确保能产生这样一个脉冲。3.2 外部引脚配置模式解析3.2.1 复用引脚加载模式 (RCW_SRC000)这种模式可以理解为一种“引脚时分复用”技术。它只使用16个引脚RC[15:0]通过另外4个RCW_LSEL[0-3]信号作为选通门控分4个时间段把64位数据传进去。Lane 选通信号锁存的RCW位对应的配置字部分RCW_LSEL0有效RC[15:0]-RCWLR[15:0]复位配置字低字 [15:0]RCW_LSEL1有效RC[15:0]-RCWLR[31:16]复位配置字低字 [31:16]RCW_LSEL2有效RC[15:0]-RCWHR[15:0]复位配置字高字 [15:0]RCW_LSEL3有效RC[15:0]-RCWHR[31:16]复位配置字高字 [31:16]硬件设计要点你需要用外部逻辑如CPLD或简单的门电路来产生这四个RCW_LSEL脉冲信号它们需要在PORESET释放后、HRESET释放前的特定时间窗口内依次有效。RC[15:0]上的数据必须在对应的RCW_LSEL有效期间保持稳定。这种方式对时序要求严格但好处是节省了48个引脚相比直接用64个引脚。3.2.2 简化引脚加载模式 (RCW_SRC011)这是我最推荐在需要硬件配置时使用的方式它在灵活性和复杂度之间取得了很好的平衡。它使用RC[21:0]中的一部分引脚结合内部硬编码值共同形成最终的RCW。你需要仔细对照手册中的表格理解每个RC引脚映射到哪个RCW位。例如RC[21:18]映射到S2P字段SerDes2协议。RC[17:15]映射到S1P字段SerDes1协议。RC14同时决定SCLK1和SCLK2两个SerDes的参考时钟125MHz或100MHz。RC[13:10]映射到MODCK[3:0]时钟模式。RC[9:7]映射到BPRT[2:0]启动端口选择。RC6映射到RPTRapidIO直通使能。RC5映射到GE1选择GE1或TDM2/3。RC4映射到GE2选择GE2或TDM0/1。RC[3:0]映射到DEVID[3:0]设备ID。实操技巧在设计跳线或拨码开关时务必为每个配置引脚设计上拉或下拉电阻确保在开路状态下有一个确定的电平。通常下拉电阻如10kΩ到地可以将默认值设为0上拉电阻如10kΩ到电源将默认值设为1。根据你的常用配置来设计默认状态可以减少生产时的跳线操作。3.3 硬编码配置模式当RCW_SRC[0-2]100或101时芯片使用内部固化的两套配置。这两套配置是固定的开发者无法修改。通常芯片厂商会提供这两套配置的具体值。例如一套可能配置为侧重于网络应用使能RGMII另一套可能侧重于串行交换配置特定的RapidIO模式。在产品开发的早期原型阶段或者在对成本极其敏感、功能固定的设计中可以直接使用这种模式省去外部元件。4. 复位配置字RCW寄存器详解与配置实战RCW最终会被锁存到两个只读寄存器中RCWLR低字和RCWHR高字。软件可以通过读取这两个寄存器来确认当前的硬件配置。理解每个字段的含义是进行正确配置的前提。4.1 RCWLR (Reset Configuration Word Low Register) 关键字段RCWLR主要控制时钟和SerDes物理层协议。CLKO (Bits 31-30)选择CLKOUT引脚输出的时钟源。可以是PLL0、PLL1、PLL2的分频输出或者直接拉低。这个引脚常用于为板卡上的其他芯片提供同步时钟。S2P (Bits 28-24) / S1P (Bits 23-20)这是最核心、最容易出错的配置之一。它们分别决定SerDes Port 2和Port 1上运行的协议。00000无协议禁用。00001-00011RapidIO 4x 模式支持1.25G, 2.5G, 3.125G波特率。00100RapidIO 1x 3.125G。01010PCI Express 1x / SGMII1 / SGMII2。这是一个复用模式具体启用哪个可能由其他引脚或软件配置决定。10001PCI Express 1x。特别注意手册中提到可以将S1P和S2P都配置为SGMII1或SGMII2但芯片内部的多路复用器只会将两个物理连接路由到QUICC Engine控制器。如果S1P和S2P都选择了SGMII那么SGMII1如果被选中会连接到SerDes Port 1SGMII2如果被选会连接到SerDes Port 2。这意味着你不能在两个端口上同时使用相同的SGMII实例。SCLK2 (Bit 17) / SCLK1 (Bit 16)选择SerDes Port 2和Port 1的参考时钟频率。100MHz时钟可以用于除3.125G波特率的RapidIO之外的所有协议和频率125MHz时钟则适用于所有情况没有例外。因此为了最大兼容性通常建议选择125MHz参考时钟前提是你的时钟源能提供这个频率。MODCK (Bits 5-0)时钟模式。这个字段与输入时钟频率、PLL倍频设置等密切相关直接决定了内核、总线等内部时钟的频率。必须严格参考时钟章节的表格进行设置设置错误可能导致芯片无法运行或运行在不稳定状态。4.2 RCWHR (Reset Configuration Word High Register) 关键字段RCWHR主要控制启动、设备身份和部分功能使能。BPRT (Bits 27-24)启动端口选择。这个字段决定了芯片从哪个接口获取后续的引导代码Boot Code。选项非常丰富包括I2C、SPI、RGMII1/2、SGMII1/2、RapidIO带或不带I2C。例如0000代表从I2C启动0011代表从SPI启动1001代表从SGMII2启动不带I2C。这里的选择必须与硬件设计匹配。如果你打算从SPI Flash启动就必须将BPRT设置为0011并且确保SPI Flash电路连接正确。RIO (Bit 23)RapidIO主机访问使能。如果使能在启动完成后RapidIO主机可以访问本设备的内部内存。RPT (Bit 22)RapidIO直通使能。这通常用于多跳Multi-hop的RapidIO网络允许数据包穿过本设备转发到其他设备。RM (Bit 18)复位主设备标志。在I2C EEPROM多设备启动场景下必须将主设备的这个位设置为1从设备设置为0。在单设备或非I2C EEPROM模式下此位通常为0。GE1 (Bit 12) / GE2 (Bit 11)这两个位控制引脚复用。它们决定对应的引脚组是用于TDM时分复用接口还是RGMII千兆以太网接口。例如如果你的板子将Port 1的以太网PHY连接到了这些引脚就需要将GE1设为1。DEVID (Bits 8-3)设备ID。在RapidIO网络中这是设备的唯一标识符。在多设备系统中每个设备必须有唯一的ID。000000通常预留给主设备或设备0000001到111111可用于从设备1到63。4.3 配置实战一个网络处理板的RCW设计案例假设我们要设计一块基于MSC8251的网络处理板需求如下SerDes Port 1 运行 4x SGMII连接四个千兆以太网PHY。SerDes Port 2 运行 PCI Express x1与主机处理器连接。从 SPI NOR Flash 启动。使用125MHz的SerDes参考时钟。芯片作为RapidIO网络中的一个节点设备ID设为1。使用I2C EEPROM存储RCW。步骤一确定RCW_SRC选择I2C EEPROM 8位地址模式即RCW_SRC[0-2] 001。步骤二计算RCWLR值CLKO: 我们不需要CLKOUT输出设为11始终低电平。S2P: Port 2 为 PCI Express x1查表得10001。S1P: Port 1 为 4x SGMII注意手册中S1P/S2P字段的选项列表里没有直接的“4x SGMII”。SGMII通常是1 Lane的协议。对于4个千兆网口MSC8251可能通过QUICC Engine配合SerDes的多个SGMII通道实现。这里需要更仔细查表。假设我们使用01010PCIe 1x / SGMII1 / SGMII2并通过其他配置将Port1的4个Lane分配给SGMII。这是一个关键假设实际设计必须根据手册和QUICC Engine章节确认。SCLK2/SCLK1: 都设为1(125MHz)。MODCK: 根据我们使用的输入时钟频率比如66.667MHz和期望的内核频率比如1GHz查时钟章节表格确定MODCK值假设为001010。其他保留位填0。假设最终计算出的32位值为0x9C80000A此为示例非真实值。步骤三计算RCWHR值BPRT: 从SPI启动为0011。RIO: 使能RapidIO主机访问设为1。RPT: 禁用直通设为0。RM: 我们是单设备设为0。GE1/GE2: 我们的网络口可能通过SGMII而非RGMII这里可能设为0使用TDM引脚具体看板子设计。假设设为0。DEVID: 设为000001。其他保留位按手册要求填0或1。假设最终计算出的32位值为0x03000041此为示例非真实值。步骤四组织EEPROM数据按照前述格式EEPROM的前16个字节应为AA 55 AA FF FF FF 9C 80 00 0A FF FF FF 03 00 00 41注意大端序0x9C80000A在内存中从高到低是9C 80 00 0A。步骤五硬件连接RCW_SRC[0-2]引脚通过电阻下拉设置为001。STOP_BS引脚下拉表示单设备。I2C EEPROM如AT24C02的地址引脚A0, A1, A2全部接地使其地址为0x50。将上述16进制数据烧录到EEPROM的起始地址。5. 复位状态与控制寄存器诊断与控制的利器除了配置MSC8251还提供了一组寄存器用于监控复位状态和发起软件复位这在调试时极其有用。5.1 RSR (Reset Status Register)这是一个“黑匣子”寄存器记录了上次复位事件的来源。它是只读的除了一些可写1清零的位并且其值在掉电复位前会一直保持。RCWSRC (Bits 31-29)直接反映了RCW_SRC[0-2]引脚采样到的值告诉你当前是从哪种源加载的配置。软件可以读取它来验证硬件配置是否正确。SW0-SW7 (Bits 23-16)8个软件看门狗定时器的超时标志。哪个看门狗超时了对应的位就会被置1。BSF (Bit 14)引导序列器失败标志。如果从I2C EEPROM加载RCW失败如前导码错误、无应答此位会被置1。这是诊断启动失败的首要检查点。SWSR/SWHR (Bits 13,12)指示上次复位是由软件发起的软复位还是硬复位。RM (Bit 11)指示本设备当前是否是复位主设备仅在使用I2C EEPROM多设备启动时有效。JPO/JH/JS (Bits 10,9,8)JTAG发起的复位请求标志。RIO2/RIO1 (Bits 3,2)RapidIO接口收到的复位请求。SRS/HRS (Bits 1,0)软复位和硬复位状态标志。调试技巧当系统异常复位后第一时间通过调试器读取RSR寄存器。如果BSF1那问题几乎肯定出在EEPROM的数据、连接或I2C总线上。如果某个SWx1则是对应的看门狗超时需要检查相关任务是否卡死。如果RCWSRC的值与预期不符则可能是RCW_SRC引脚的上拉/下拉电阻焊接问题。5.2 RPR RCR (Reset Protection Control Register)这两个寄存器配合用于发起软件复位。由于写RCR会导致系统立即复位这是一个危险操作所以用RPR加了一把锁。首先向RPR寄存器写入特定的密码0x52535445ASCII码是“RSTE”。写入成功后RCER寄存器的CRE位会被置1表示RCR的写保护被暂时解除。此时向RCR的SWSR位写1触发一次软复位向SWHR位写1触发一次硬复位。复位发生后RCR的写保护会自动恢复。重要警告手册中特别强调当通过写RCR发起复位时该写事务不会正常完成。如果是由一个主机如另一个处理器通过总线来写这个寄存器主机可能会因为收不到响应而挂起。因此通常只由MSC8251自身的内核来执行这个操作并且要做好代码上下文可能丢失的准备。6. 常见问题与排查技巧实录在实际开发和调试中复位配置相关的问题层出不穷。下面是我总结的一些典型问题和排查思路。6.1 问题芯片上电后无反应HRESET一直为低这是最严重的启动失败情况。排查步骤测量电源和时钟首先用示波器确认所有电源轨核心电压、IO电压等是否稳定上电外部参考时钟CLKIN是否有波形且频率正确。检查RCW_SRC引脚用万用表或示波器测量RCW_SRC[0-2]三个引脚的电平确认是否与设计一致上拉/下拉电阻是否焊接有无短路。检查PORESET时确认PORESET信号是否在电源稳定后正确释放从低到高。如果是I2C EEPROM模式测量STOP_BS引脚电平是否正确单设备为低。用示波器或逻辑分析仪抓取I2CI2C_SCL,I2C_SDA总线在上电后的活动。看是否有起始信号、地址0x50的发送、以及数据读取。如果没有任何活动可能是EEPROM器件问题、I2C总线被拉死检查上拉电阻、或者芯片内部Boot Sequencer未工作。如果I2C有活动但很快停止读取RSR寄存器检查BSF位是否被置1。如果置1重点检查EEPROM数据前导码0xAA55AA是否正确保留字节0xFFFFFF是否填了数据字节序是否是大端可以用编程器重新读取EEPROM内容进行校验。如果是引脚配置模式用示波器检查RCW_LSEL[0-3]和RC[15:0]的时序是否符合手册要求。检查配置电阻或拨码开关的焊接。6.2 问题芯片能启动但某些外设如网口、PCIe不工作这通常是RCW配置错误特别是S1P/S2P、GE1/GE2、BPRT等字段设置与硬件实际连接不符。排查步骤软件读取验证在启动的初始化代码中尽早读取RCWLR和RCWHR寄存器打印出其十六进制值。反向解析将读出的值与你的设计值对比。重点关注出问题的外设相关的位域。例如网口不工作就检查S1P/S2P是否配置为了SGMII或RGMII模式GE1/GE2是否使能了正确的引脚复用。检查时钟确认SCLK1/SCLK2选择的参考时钟频率125/100MHz是否与板上实际连接的晶振或时钟发生器输出一致。SerDes对参考时钟的精度和抖动要求很高。检查启动端口如果代码根本没能从预期的启动设备如SPI Flash加载检查BPRT字段。同时检查该启动设备的硬件连接是否正常。6.3 问题在多设备系统中从设备无法启动排查步骤确认主从身份分别读取主设备和从设备的RSR寄存器确认RM位是否正确主为1从为0。检查STOP_BS信号用示波器观察从设备STOP_BS引脚。在上电初期它应该被外部上拉电阻保持为高。在主设备完成自身配置后应该能看到主设备通过GPIO或专用逻辑依次给各个从设备的STOP_BS一个释放脉冲从高变低再变高这里需要根据手册时序确认具体波形。检查主设备代码主设备在读取自身RCW后是否有正确执行“多设备支持”的引导代码这段代码需要负责读取从设备RCW并模拟EEPROM。确保这部分逻辑正确并且I2C从机模拟的地址是0x57。检查连接顺序主设备释放STOP_BS的顺序必须与从设备读取RCW的顺序一致。检查硬件连接和软件配置的顺序是否匹配。6.4 配置EEPROM的实用工具与技巧编程器在生产环节使用通用的EEPROM编程器是最可靠的。确保编程软件支持二进制文件.bin或十六进制文件.hex并且能正确设置起始地址。在线编程在开发阶段可以通过MSC8251已运行的程序或者通过调试器连接其I2C控制器直接对挂在总线上的EEPROM进行编程。Linux下可以使用i2c-tools包中的i2cset和i2cget命令或者编写一个简单的内核驱动。务必注意在线编程时要避开芯片上电复位期间否则可能会干扰Boot Sequencer导致启动失败。一种安全做法是在系统完全启动后先让I2C总线控制器接管EEPROM再进行擦写。数据校验烧录后一定要进行回读校验。由于EEPROM数据错误会导致无法启动建议在EEPROM中预留一个校验和区域如CRC32主设备在启动初期可以快速校验数据完整性如果错误则转入安全模式如使用默认配置或点亮错误指示灯。复位配置是MSC8251乃至所有复杂嵌入式处理器启动的“钥匙孔”钥匙配对了门才能打开。花时间彻底理解它能在后续的驱动开发、系统调试中节省无数个小时。记住当遇到任何诡异的启动问题时第一个怀疑对象就应该是RCW配置和它的加载过程。