ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

EtherCAT从站板卡调试全流程:国产DSP固化与主站通信验证

EtherCAT从站板卡调试全流程:国产DSP固化与主站通信验证 拿到一块全新的国产EtherCAT从站板卡上面还挂着一颗国产DSP第一反应肯定是这东西能不能跑起来EtherCAT从站能不能被主站识别DSP里的程序固化后又能不能脱离仿真器独立启动这些问题不解决后面的电机控制、IO扩展、数据采集全都无从谈起。我这次测试的对象是FCE1100从站芯片加FCP32C335 DSP的组合板卡。FCE1100是国产EtherCAT从站控制器ESC内置了两路PHY支持标准的EtherCAT从站协议栈FCP32C335则是面向电机控制和数字电源场景的浮点DSP片内集成ADC、ePWM、QEP等外设定位上和主流C2000系列比较接近。这套板子说白了就是把ESC和DSP放到一块板上由DSP通过并行总线或SPI跟ESC交换数据ESC负责跟EtherCAT主站通信DSP负责真正的控制算法。这篇文章不聊理论纯讲实操。我会把从拿到板卡到完成EtherCAT通信验证的完整流程拆开包括测试环境的搭建、上电自检顺序、DSP侧验证方法、从站通信调试、以及我踩过的几个坑。如果你也在做类似的国产化方案验证或者刚接触EtherCAT从站开发这篇文章应该能帮你省掉不少弯路。1. 整体测试思路先把链路拆成三段1.1 测试对象拆解与核心需求拿到一块新板子第一件事不是急着上电而是想清楚这块板子上有哪些独立的“功能域”。我习惯把这类板卡拆成三段来测第一段是基础硬件域包括电源、时钟、复位、JTAG链路。这一段挂了后面什么都不用谈。第二段是DSP域验证DSP能不能正常启动、固化程序能不能脱离JTAG运行、外设寄存器是否可访问。第三段是EtherCAT通信域验证FCE1100能不能被主站扫描到、ESC寄存器是否正常、过程数据能不能在主站和DSP之间跑通。每一段都有独立的验证目标和判定标准段与段之间有依赖关系。最典型的例子就是DSP域和EtherCAT域是强耦合的DSP要通过SPI或并行总线读写FCE1100的寄存器而FCE1100的EEPROM里又存着从站描述信息。如果DSP跑不起来就算EtherCAT物理链路通了也没有人帮你配置ESC。所以整套测试流程的设计逻辑是先把“地基”打牢再做“上层建筑”。很多人一上来就接网线用TwinCAT扫描结果从站扫描不到排查半天发现是DSP那边的电源域没配置好白白浪费时间。1.2 为什么选这套芯片组合来做功能板验证FCE1100和FCP32C335这个组合在目前国产工控方案里属于比较典型的搭配。FCE1100作为从站控制器承担的是EtherCAT协议栈的底层处理它的核心优势在于把ESC核、两路PHY和相关的存储管理单元集成在一颗芯片里降低了外围电路的复杂度。FCP32C335则负责具体的控制逻辑比如电机控制里的电流环、速度环、位置环或者IO控制里的逻辑调度。这种方案的价值在于EtherCAT的实时性是由ESC硬件保证的跟DSP的处理负载无关。DSP只需要在控制周期内完成一次对ESC双端口RAM的读写就能完成数据交换。这样DSP可以专心跑算法不用操心以太网帧的处理。这也是EtherCAT设计哲学的体现把实时性交给硬件把灵活性交给处理器。选这套组合做测试还有一个现实原因供货稳定、技术支持响应快。对于工业产品开发来说这是很实际的考量。功能板测试的真正目的就是验证这套国产方案能不能在功能上替代原有方案以及有没有隐藏的坑。所以整个测试流程必须覆盖到接口时序、启动模式、异常处理等容易被忽视的细节。2. 测试环境准备与上电自检2.1 必备工具清单与硬件连接测试EtherCAT从站板卡工具准备很关键。我这次用到的工具包括可调直流电源至少双路一路给板卡主供电一路备用、数字万用表、示波器100MHz以上带宽即可主要看时钟和通信波形、带TwinCAT 3的工控机作为EtherCAT主站、XDS系列仿真器用于DSP调试、以及一条质量可靠的网线。硬件连接上有一点容易忽略EtherCAT是链式拓扑从站板卡上有IN和OUT两个网口。测试时主站网线要接IN口OUT口可以留给下一个从站。如果接反了设备不会被主站识别。另外如果电脑网卡不支持EtherCAT或者驱动没装好TwinCAT会直接扫描不到从站这个不是板卡的问题是环境没准备好排查时要先排除这一点。还有一个建议给板卡供电前先用万用表测量一下板卡电源输入端的阻抗确认没有明显短路。特别是在焊接完样板之后这一步能避免通电瞬间烧掉价值不菲的DSP或ESC。2.2 上电时序与电源轨验证上电测试的第一步是验证电源轨的电压和时序。FCE1100和FCP32C335这套方案通常需要多路电源DSP内核电压通常是1.1V或1.2V、IO电压3.3V、ADC参考电压3.3V模拟电源、以及ESC和PHY的电源3.3V或1.0V。这里要特别提醒多路电源的上电顺序是有要求的。有些DSP要求内核电源必须先于IO电源上电或者至少在IO电源上电前完成复位释放。如果电路设计里没有做电源时序控制测试时就要格外小心。我的做法是先用示波器同时测两路主要电源观察上电瞬间的电压爬升顺序确认没有倒挂现象。电源纹波也是个不能忽视的指标。EtherCAT PHY对电源纹波比较敏感纹波过大会导致通信误码率升高。用示波器带宽限制在20MHz测量3.3V电源的纹波如果峰峰值超过50mV建议检查滤波电容是不是没贴全或者地平面设计是否有问题。我在实际测试中就遇到过PHY工作不稳定、偶发掉线的情况最后定位到是电源纹波过大导致的。时钟验证同样关键。FCE1100通常需要一个25MHz晶振DSP则需要自己的时钟源。用示波器确认晶振起振正常频率偏差在±50ppm以内。如果晶振没起振后面从站扫描不到基本是必然的。2.3 JTAG链路与DSP连接确认在进入功能测试前还要验证JTAG链路是否通畅。接上仿真器打开CCSCode Composer Studio或者对应的IDE尝试连接DSP。如果不连接大概率是以下几个原因JTAG引脚虚焊、TCK频率太高、DSP电源没上来、或者复位电路有问题。我在这一步吃过亏第一次连接时TCK频率设成了默认的最高值结果死活连不上后来把TCK降到1MHz就正常了。原因很简单——样板上JTAG走线没有做阻抗匹配信号质量差。如果你也遇到类似问题优先降频试试这比怀疑芯片坏掉要实际得多。还有一个跟JTAG相关的坑跟热搜词里那个问题完全对应“DSP固化程序后必须接JTAG才能启动”。这个问题我会在后面的常见问题环节单独展开这里先留个悬念。3. DSP侧功能验证从裸机启动到外设自检3.1 固化程序的启动流程与必要条件DSP侧测试重点是验证程序能正常烧写进Flash并且在断电后能脱离JTAG独立启动。这个过程设计到三个要素启动模式引脚Boot Mode配置、Flash烧写算法、以及复位后的启动流程。FCP32C335这类DSP启动行为由启动模式引脚决定。常见的启动方式包括从Flash启动、从SCI/SPI引导启动、从并行接口启动。不同的启动模式对应不同的引脚电平组合这个信息在数据手册里会有详细说明。固化程序后要断电重新上电启动必须确保启动模式引脚被设置成“从Flash启动”而不是停留在仿真模式或者等待外部引导的状态。具体操作上我会先在CCS里完成一次仿真运行确认程序逻辑没有问题然后把.out文件通过烧写工具写入Flash。烧写完成后断开仿真器连接板卡断电再上电。如果板卡上有一颗LED就写一段点灯程序来验证启动是否成功。这是最直观、最快速的验证方法。3.2 必要外设的自检清单DSP能启动不代表所有外设都正常。作为功能板测试我应该对板卡上用到的每一个外设都过一遍自检。以典型的控制类板卡为例自检至少包括GPIO基本读写往引脚写高/低电平用万用表或示波器确认电平正确排除虚焊和配置错误。串口回环测试把TX和RX短接发送一串数据看能不能原样收到。这一步验证SCI模块和电平转换芯片是否正常。ADC采样验证给一个已知电压到ADC输入引脚读寄存器值跟理论计算值对比误差在合理范围内即可。编码器、温度传感器这类信号链的调试依赖ADC的准确性。ePWM波形输出用示波器看PWM波形频率和占空比是否与配置一致。这些外设测试看起来简单但功能板测试的价值就在这里提前把所有信任建立起来后面联调的时候就不用来回猜是硬件问题还是软件问题。我的习惯是每项测试写一个独立的小函数并通过串口输出测试结果这样批量测试或产线复测时效率会高很多。还有一点需要提醒如果DSP用了__attribute__((ramfunc))这类修饰符把时间关键函数放到RAM里运行要记得确认链接脚本CMD文件里对应段地址分配正确。Ramfunc功能在Flash执行速度慢的场景下特别好用比如电机控制的PWM中断处理函数。但配置不正确会导致程序跑飞而且这个跑飞往往是上电后随机出现的排查起来很头疼。3.3 DSP与FCE1100的接口初始化DSP自检通过后接下来就要把DSP和FCE1100之间的通信打通。FCE1100的从站接口PDIProcess Data Interface通常支持并行总线或SPI具体用哪种取决于硬件设计。我的板卡是用并行总线连接的所以DSP侧需要初始化外部存储器接口EMIF或者GPIO模拟的并行时序。初始化接口时优先级最高的是读写FCE1100的ESC寄存器。第一次测试时我只写了极简的代码给ESC复位寄存器写一个值再读回来验证数据一致。这个“写读回”测试虽然简单但能一次性验证片选、地址线、数据线、读写时序是否正确。如果读回来是0xFF或者0x00先别怀疑芯片坏检查一下时序是不是不满足数据手册里的建立时间和保持时间要求。这一步在整套测试流程里承上启下接口通了后面才能做EEPROM配置和过程数据交换。接口不通EtherCAT主站扫描到从站也没有意义因为即使ESC被激活了DSP这个“大脑”也拿不到数据。4. EtherCAT从站通信测试从扫描到OP状态4.1 从站描述文件与EEPROM配置EtherCAT从站能被主站识别靠的是从站控制器内部EEPROM里存的信息包括厂商ID、产品码、修订号、以及PDO映射的默认配置。这些信息的“源头”是ESI文件EtherCAT Slave Information通常也叫XML文件。生产从站时厂商会用SSC工具EtherCAT Slave Stack Code生成从站代码同时生成对应的XML文件然后把关键信息烧录到从站的EEPROM里。测试中遇到最多的问题就是从站扫描出来后显示“Unknown Device”或者厂商ID不对。这通常是EEPROM没有烧录或者烧录内容不完整造成的。我遇到的大部分是从站出厂时EEPROM是空的需要自己用SSC工具或第三方工具把XML导入并写入。实操方式有两种一种是用主站软件比如TwinCAT的ESC EEPROM工具直接写入前提是你的主站支持这个功能另一种是用SSC工具配合调试器在从站侧手动烧写。两个方式我都用过TwinCAT的EEPROM工具稍微方便一些但要注意写入时从站必须在INIT状态不能在OP状态。另外要注意XML文件里PDO映射和实际硬件要一致。比如FCE1100的PDI配置的是16位数据总线但XML里配成了8位那运行时会随机出错且错误非常难查。4.2 主站扫描与ESC寄存器级验证在TwinCAT 3里扫描I/O设备能发现新从站并自动导入XML文件。扫描成功后设备列表里会显示从站名称和状态。如果扫描不到检查物理链路、主站网卡驱动、以及从站的EEPROM内容。扫描成功后先别急着切到OP状态。我习惯先看几个关键的ESC寄存器AL Control0x0120从站状态机控制寄存器主站通过它控制从站状态迁移。AL Status0x0130从站状态反馈寄存器反映从站当前所处的状态。从站信息接口SII即EEPROM接口相关寄存器确认SII访问正常。这些寄存器用TwinCAT的在线监视功能可以直接查看也可以通过DSP侧代码读回来通过串口打印。后者在产线调试中更有意义因为不依赖主站环境。还有一个很重要但容易忽略的寄存器是DPRAM的SM配置。EtherCAT从站必须配置好Sync Manager同步管理器通道主站才能进行过程数据交换。SM0/SM1通常用于Mailbox邮箱通信SM2/SM3用于过程数据Process Data。如果SM通道的配置跟XML不一致从站状态切到SAFEOP时会报错或者数据不刷新。4.3 状态机切换与PDO数据回环EtherCAT从站状态机有四个主状态INIT、PREOP、SAFEOP、OP。主站下发状态切换命令后从站需要逐级迁移。每一级都有必须完成的工作INIT到PREOP必须完成邮箱通信的建立包括SM0/SM1的配置和邮箱协议握手。PREOP到SAFEOP主站会配置过程数据映射FMMU和SM2/SM3从站开始进行输入数据的刷新但输出数据不会更新到硬件。SAFEOP到OP输出数据开始真正更新到硬件此时控制指令才生效。测试时要关注每个状态切换是否成功尤其是PREOP到SAFEOP这一步这是配置错误的重灾区。常见的现象是从站状态卡在PREOP上不去TwinCAT报错提示SM配置错误或FMMU配置错误。这时候对照XML文件和ESC寄存器的实际配置通常能很快定位问题。PDO数据回环测试是验证通信是否正常的好方法。我通常会做这样一个测试主站发送一组递增数到输出PDODSP从FCE1100的DPRAM里读到这组数校验无误后把这组数再写回输入PDO。主站读取后跟发送值对比完全一致就说明整条数据链路是通的。这个测试虽然简单但能覆盖从主站应用层到DSP应用层的完整通路非常值得做。4.4 DC同步与分布式时钟验证EtherCAT的DCDistributed Clock分布式时钟功能是它的核心特性之一用于实现所有从站的同步。如果你的应用是电机控制或者需要多轴同步DC同步是必须验证的。DC同步测试要做两件事第一确认从站的SYNC0和SYNC1中断信号引出来了这两个信号通常连接到DSP的GPIO或中断引脚第二用示波器同时测量两个从站或一个从站和一个主站信号的SYNC脉冲观察脉冲是否对齐抖动有多大。在实际测试中如果SYNC脉冲抖动很大先检查DC时钟的同步误差是否在合理范围内通常小于1微秒。如果误差偏大可能是FCE1100的时钟源精度问题或者主站的DC配置有问题。还有一个容易忽略的点DSP的中断响应延迟会直接影响控制周期抖动所以在验证DC同步时要确保DSP的中断处理代码足够短不要在里面做耗时操作否则会出现功能性正确但性能指标不达标的情况。在我测试的这块板卡上SYNC0接到DSP的外部中断引脚中断里执行电流环计算。我特意把中断函数用__attribute__((ramfunc))放到RAM里执行保证Flash等待周期不会影响中断响应速度。这个做法在测试中确实有效中断抖动从原先的几百纳秒降到了几十纳秒的水平。5. 常见问题与排查技巧实录5.1 DSP固化后必须接JTAG才能启动原因在哪这是热搜词里出现频率极高的问题我在测试中也踩过。现象描述是程序在仿真器下运行完全正常但烧写进Flash后断开JTAG重新上电程序就是不跑。而一旦接上仿真器连接一下程序又能正常工作。这个问题的根源是启动模式引脚Boot Mode和上电时序共同作用的结果。接上仿真器时仿真器会强制复位DSP并接管控制所以即使启动模式引脚配置不对程序也能通过仿真器加载运行。而脱离仿真器上电后DSP会按照启动模式引脚的电平组合去决定从哪里启动。如果引脚配置的是“从SCI引导”而不是“从Flash启动”那程序自然起不来。排查方法很直接用万用表测量启动模式引脚在断电和上电两个状态下的电平逐位对照数据手册里的启动模式选择表。很多时候问题就出在硬件上拉/下拉电阻没贴对或者贴错了位置。还有一个因素DSP复位释放时机。如果DSP还在复位状态但FCE1100已经启动了两个芯片之间可能产生总线冲突导致DSP启动时读不到正确的Flash内容。解决方法是在DSP复位释放代码里加一个延时确保所有外设已经稳定。这个延时放在系统初始化函数的最开始。5.2 主站扫描不到从站作为EtherCAT调试中最常见的问题主站扫描不到从站的原因通常是这几类物理层问题网线接到OUT口了、网线质量差、PHY没工作。检查PHY的link指示灯如果没亮先排查PHY供电和时钟。主站环境问题网卡驱动不支持EtherCAT、主站软件没有选择正确的网卡。在TwinCAT里查看网卡是否被识别为兼容设备。从站EEPROM问题EEPROM是空的或者校验错误主站无法识别。FCE1100内部也有默认的信息但通常不是你要的厂商ID。所以量产前必须烧录EEPROM。硬件设计问题两根差分线走线太长、阻抗不匹配、或者PHY的终端电阻没接对。这个问题在样板阶段尤其常见。排查顺序建议先物理层再主站环境最后查从站侧。不要一上来就怀疑芯片大概率是外围问题。5.3 SM看门狗与通信中断从站正常运行一段时间后偶尔出现主站报SM看门狗超时或者从站状态自动从OP掉到SAFEOP。这个问题我调试了两天才定位到根因。一开始我以为是主站那边的问题反复调整看门狗时间参数但效果不明显。后来用示波器抓取DSP和FCE1100之间的并行总线时序发现DSP在极端情况下的访问间隔会超过设置值导致ESC侧的看门狗认为DSP“失联”了。原因是我在DSP代码里有一个耗时较长的初始化过程没有及时响应FCE1100的中断请求。解决办法有两个层面一是软件上优化代码把耗时操作分段执行确保周期内能及时访问DPRAM二是工程上合理设计看门狗超时值不要设得太苛刻。EtherCAT主站请求的超时值通常在微秒到毫秒量级要根据实际控制周期来设而不是想当然用一个默认值。5.4 排查工具与调试经验速查用好调试工具能省一半排查时间。我常用的有这几样第一Wireshark抓包。Windows下安装Wireshark后配合相关的EtherCAT解析插件可以抓取主站和从站之间的报文。这个功能对分析状态机切换失败、主站下发的配置命令是否正确都很有用。不过要注意普通网卡不一定能抓到所有EtherCAT帧需要网卡支持混杂模式。第二TwinCAT在线监视。TwinCAT的Process Image能直观看到PDO数据变化Online监视能看到寄存器的实时值。配合ADS通信还可以在运行中修改参数用来验证控制策略很顺手。第三示波器的协议解码功能。现在的示波器基本都支持SPI、I2C等协议的触发和解析抓DSP跟FCE1100之间的通信时序非常方便。比对着时序图猜测信号正常与否要高效得多。我整理了一个简易排查表仅供参考故障现象可能原因排查手段主站扫描不到从站网口接错、PHY不工作、EEPROM空看PHY灯、查硬件、烧录EEPROM从站卡在PREOPSM/FMMU配置错误对照XML检查SM配置状态切到OP后数据不动DSP侧未正确读写DPRAM示波器抓DPRAM时序、检查DSP地址映射SM看门狗超时DSP访问间隔过大优化中断代码延长看门狗超时时间固化后不启动启动模式引脚错、复位时序不对测引脚电平、增加上电延时5.5 一些小而关键的细节最后再分享几个经验细节这些坑不踩一次很难意识到。FCE1100的复位信号和DSP的复位信号最好不要直接连在一起。两个芯片的复位时序要求不一样简单的并联可能导致上电后FCE1100先跑了DSP还没准备好。最佳做法是分别控制或者加RC延时。烧录EEPROM时一定要等写入完成再断电。EEPROM写入过程中掉电会得到一份损坏的数据而且损坏的数据很难用肉眼看出来只有主站扫描的时候才会报错。我的习惯是烧录完后再读一遍校验确认无误才进入下一步。DSP侧的代码能放在RAM里执行的尽量放在RAM里。不仅是为了快更重要的是避免Flash启动阶段等待周期导致的不可预测行为。这在实时性要求高的控制类板上是一个必须养成的习惯。还有一点关于XML文件主站导入的XML文件应该跟从站EEPROM里的信息保存一致。如果生产过程中改过硬件比如改了PDO映射要重新生成XML并重新烧录EEPROM。别偷懒不然产线上会有一堆“看起来没问题但就是通信异常”的板子等你收拾。6. 我的测试体会整套流程跑下来我对FCE1100和FCP32C335这套国产组合的评价是功能上是胜任的稳定性也在可接受范围内。FCE1100作为从站控制器它的寄存器接口和EtherCAT协议处理都符合标准没有出现“用不了”级别的bug。FCP32C335的性能和开发方式跟主流DSP很接近上手成本不高。国产方案真正需要积累的是应用层的经验和坑位——比如上电时序、启动配置、看门狗设置这些细节每一类都要靠实打实的调试去趟平。在设计测试流程时我建议你也不要只盯着通信功能本身。一块功能板要真正达到量产水平基础电源测试、外设自检、通信功能验证、异常场景恢复每一个环节都值得花时间。测试流程的价值就是把隐藏问题暴露在早期而不是等到现场出现大规模故障再救火。最后给一个实用建议所有测试过程都记录留档。每块板卡的序列号、烧录的EEPROM版本、DSP固件版本、测试结果全部记录下来。辛苦一次后面问题追溯的时候你会感谢当时的自己。
返回列表