EtherCAT从站开发:国产芯片FCE1100+FCP32C335测试全解析
发布时间:2026/9/4 11:07:16
分类:文化教育
浏览:1234

1. 为什么是这两颗国产芯片从“能用”到“好测”的选型逻辑先说结论在一个真实的工业控制器功能板项目里我用了国产品牌JLC旗下的FCE1100作为EtherCAT从站通信芯片配合峰岹科技Fortior的FCP32C335这颗国产DSP做电机控制与算法处理完成了从站功能板的硬件设计、协议栈移植、主站联调与整机测试。整条链路走下来踩了芯片手册的坑、吃了EEPROM配置的亏、也绕了协议栈版本匹配的远路这篇文章把完整测试流程和排查思路整理出来给正在做国产化替代或EtherCAT从站开发的朋友一个直接能抄的参考。选型时最初的诉求很简单项目要求核心器件国产化率达标同时 EtherCAT 从站方案要能稳定跑周期同步位置模式CSP后续还要扩展到周期同步速度模式CSV和周期同步力矩模式CST。之前团队用过AX58100和LAN9252但这两颗在国产化率清单里不算友好供货周期和授权链路也是问题。FCE1100的出现恰好补了这个空档——它内部集成了EtherCAT从站控制器ESC所需的数据链路层DLL和应用层AL硬件逻辑外部只需要配一颗MCU或DSP通过SPI或并行总线访问其寄存器空间即可。FCP32C335这边它是一颗面向电机控制的双核架构DSP主核负责算法第二核可以跑通信协议栈或IO管理。选它而不是STM32或普通MCU是因为电机控制场景里PWM分辨率、ADC同步采样、硬件过流保护这几个指标MCU做起来要么占用CPU太多要么响应不够快。DSP的MAC单元和CLA控制律加速器在这种负载下优势明显。测试流程的目标也很明确在功能板上验证FCE1100作为从站控制器的通信链路是否稳定验证FCP32C335的应用层逻辑与FCE1100的数据交换是否正常最后用TwinCAT做主站通过EtherCAT总线完成对功能板的实时控制。整个测试分为硬件准备、从站配置、协议栈集成、系统联调四个阶段。2. 功能板硬件搭建供电、时钟与SPI接口的实测要点硬件测试的第一步不是上电而是核对原理图和功能板实际物料是否一致。FCE1100的封装是QFN48引脚间距比较密手工焊接容易桥连。我这边是先目检、再万用表逐脚测对地阻抗重点排查电源引脚和地引脚之间有无短路。FCP32C335是LQFP100封装相对好焊但它的多个VDDIO引脚必须确认全部接对电压域否则GPIO电平会异常。2.1 电源树设计与实测电压功能板采用24V输入板内生成5V和3.3V两路主电源。5V给DSP的模拟部分和编码器接口供电。3.3V给DSP的IO、FCE1100、SPI Flash、EEPROM等数字部分供电。实际测量时我用示波器看了一下3.3V的上电波形FCP32C335要求3.3V电源爬升时间不能太快也不能太慢手册里给的范围是0.14ms到100ms。如果上电过快DSP内部的POR电路可能不触发导致程序跑飞或时钟配置失败。FCE1100对电源要求宽松一些但仍然建议先于或同步于DSP上电避免 SPI 通信时电平不一致。2.2 时钟源选择FCE1100需要25MHz的有源晶振或者无源晶体推荐直接使用25MHz无源晶体加两个负载电容便宜且稳定。FCP32C335的主时钟是10MHz外部晶体内部PLL倍频到150MHz主频。这里有一个坑两个芯片的时钟必须独立不能共用同一个晶振输出否则高频噪声会互相干扰EtherCAT通信的同步抖动会明显增大。我实际测试时FCE1100的25MHz晶体边上预留了33Ω的串联电阻位置。如果EMI测试超标可以焊接这个电阻抑制谐波辐射。另外如果功能板空间允许FCE1100的时钟输出脚可以引一根短的测试线方便用示波器直接观察时钟信号质量。2.3 SPI接口接线与速率验证FCE1100支持SPI从模式最大SPI时钟约20MHz左右。FCP32C335的SPI模块工作在主模式我用的是SPI Mode 0CPOL0CPHA0数据线为SDI、SDO、SCLK、CS四根线。接线走线时特别留意SCLK和SDO不要平行走太长否则信号边沿变缓高速通信时误码率上升。我的板子上SCLK走线长度约15mmSDO约12mm实测SPI速率15MHz时通信稳定没有丢数据。如果走线超过30mm建议降低SPI速率到8MHz以内或者串联22Ω电阻做阻抗匹配。3. 从站地址配置与EEPROM烧录流程EtherCAT从站必须有一个唯一的从站地址这个地址通常存储在从站EEPROM里。FCE1100内部有硬件EEPROM接口可以外挂一颗64Kbit的EEPROM比如AT24C64用来存放从站信息接口SII数据和厂商自定义数据。上电时FCE1100会从EEPROM加载配置如果没有EEPROM或者EEPROM内容为空从站会以默认状态工作但主站无法识别它的厂商信息和PDO配置联调时会出现“Device not responding”或者扫描不到从站的故障。3.1 EEPROM地址分配与内容组织FCE1100的SII区域遵循EtherCAT标准布局地址0x0000-0x003F从站信息区包括ESC版本、从站类型、PDI控制、PDI配置等。地址0x0040-0x007F标准从站信息包括厂商ID、产品代码、修订号。地址0x0080-0x00FF邮箱通信配置CoE、FoE、EoE等。地址0x0100-0x01FFPDO映射表和SM通道配置。地址0x0200-0xFFFF厂商自定义区域可存放固件版本、序列号等信息。烧录工具我用的是SSCSlave Stack Code工具生成的EEPROM镜像然后在TwinCAT的ESC配置界面里直接写入。注意EEPROM烧录完成后必须重新上电或者复位FCE1100才能生效。我试过不重新上电直接扫描结果从站响应还是旧配置一度以为写失败了。3.2 通过SSC工具生成EEPROM镜像的要点SSC工具是倍福官方提供的从站代码生成器但针对FCE1100这类国产芯片需要注意SSC版本和芯片寄存器地址是否一致。FCE1100的寄存器映射基本兼容标准EtherCAT ESC但也存在个别差异例如DL控制寄存器的位定义和标准ESC稍有不同。如果直接用SSC生成的默认配置文件某些功能会不正常。我当时对标了FCE1100的数据手册和SSC工具生成的esi文件发现同步管理器SM的起始地址和长度定义完全一致所以默认SSC配置可以直接用。但如果你用的是其他国产ESC芯片建议先用Wireshark抓包确认从站上电后发的AL状态机是否正确再决定是否调整配置。3.3 地址配置的硬件实现从站地址除了存储在EEPROM里还可以通过硬件引脚配置。FCE1100有一组地址配置引脚ADDR[3:0]上电时FCE1100会读取这些引脚的电平并与EEPROM中的地址进行组合。我设置的是通过4位拨码开关配置从站地址的低4位高4位固定为0。这样同一个功能板在产线调试时可以快速分配不同站号不用反复修改EEPROM。实测时需要注意拨码开关切换地址后FCE1100必须完全掉电重新上电才能生效单纯复位信号不一定刷新地址锁存。4. 协议栈集成SSC代码进入DSP后的移植与适配FCE1100本身只完成EtherCAT的数据链路层功能应用层协议栈如CoE、FoE需要运行在外部MCU/DSP上。FCP32C335作为主控需要在它上面移植EtherCAT从站协议栈。我用的是倍福SSC工具生成的SSC-6xx系列从站代码C语言版本这个代码框架结构清晰支持裸机运行也支持FreeRTOS等实时系统。FCP32C335这边我选择裸机轮询方式跑协议栈因为周期任务如电流环已经占了大部分CPU时间裸机方式更可控。4.1 SSC代码目录结构与关键文件SSC生成的代码包含几个关键模块ecat_def.hEtherCAT从站参数定义包括站地址、PDO长度、SM配置等。ecat_main.c主循环函数处理EtherCAT状态机切换、协议栈事件。ecatappl.c应用层接口用户需要实现的对象字典和PDO映射在这里。ecatslv.c从站核心逻辑包括状态机处理、邮箱通信。spi_drv.cPDI过程数据接口底层驱动这里替换为FCP32C335的SPI驱动。移植的重点就是重写PDI底层驱动让协议栈能够通过SPI访问FCE1100的寄存器。FCE1100的SPI接口支持16位地址16位数据的访问方式也支持8位地址模式。我使用的是16位地址模式因为EtherCAT寄存器地址本身就是16位范围这样做可以避免地址拆分麻烦。4.2 SPI读写函数的实现与验证底层驱动的核心是两个函数读寄存器和写寄存器。// 读FCE1100寄存器 uint16_t FCE1100_ReadReg(uint16_t regAddr) { uint16_t result 0; FCE1100_CS_LOW(); SPI_SendByte((regAddr 8) 0xFF); // 高8位地址 SPI_SendByte(regAddr 0xFF); // 低8位地址 SPI_SendByte(0); // 高8位数据任意 result SPI_ReceiveByte(); // 低8位数据 FCE1100_CS_HIGH(); return result; } // 写FCE1100寄存器 void FCE1100_WriteReg(uint16_t regAddr, uint16_t data) { FCE1100_CS_LOW(); SPI_SendByte(((regAddr 8) 0xFF) | 0x80); // 写标志位 SPI_SendByte(regAddr 0xFF); SPI_SendByte((data 8) 0xFF); SPI_SendByte(data 0xFF); FCE1100_CS_HIGH(); }这个接口逻辑看起来简单但有两个细节必须注意第一CS片选信号在每次读/写操作后必须拉高再拉低形成一个完整的传输周期。如果CS一直拉低FCE1100的SPI从机状态机保持下一次访问会错位。第二读操作时高8位数据是无效的FCE1100在第三个字节返回的是高8位数据但通常会被忽略只需要读第四个字节。如果你用8位MCU需要注意字节序问题。4.3 中断与状态检测处理FCE1100有一个INT输出引脚当EtherCAT主站改变从站状态如从INIT切换到PRE-OP时FCE1100会产生中断。FCP32C335把INT引脚配置为GPIO下降沿触发中断在中断服务函数里读取FCE1100的中断状态寄存器然后调用协议栈的事件处理函数。这个中断处理逻辑我后来简化了改成在主循环里轮询INT引脚电平因为FCP32C335的中断资源有限SPI通信本身也有一定延时轮询方式在10ms周期内完全来得及。实测下来轮询方式的最大中断响应延迟约200us对EtherCAT同步性能没有影响。5. 系统联调与常见问题排查从TwinCAT扫描到同步运行硬件和软件都就绪后进入系统联调阶段。主站我用的是TwinCAT 3通过网卡直连功能板的EtherCAT IN接口。联调过程分为几个关键步骤每步都可能踩坑。5.1 主站扫描与从站识别在TwinCAT中新建EtherCAT主站后点击“扫描设备”正常情况下应该能发现一个EtherCAT从站设备。如果扫描不到按优先级排查物理链路用网线测试仪确认EtherCAT IN和网卡接口的线序正确。从站供电FCE1100的VCC和GND是否正常示波器确认3.3V稳定。EEPROM配置读取FCE1100的AL状态寄存器确认它处于INIT状态且无错误位。我当时第一次扫描时失败了排查后发现是FCE1100的EEPROM内容没有正确写入——FCE1100上电后从EEPROM读取SII数据失败导致它无法进入可配置状态。重新烧录EEPROM并重新上电后扫描成功。5.2 SM通道与PDO映射的配置扫描成功后TwinCAT会读取从站的EEPROM信息自动识别从站型号和PDO配置。但如果你的PDO映射是自定义的需要在TwinCAT的从站配置界面手动添加PDO条目。SM通道配置遵循EtherCAT标准SM2和SM3用来传输过程数据TxPDO/RxPDOSM0和SM1用来传输邮箱数据CoE、FoE。FCE1100的SM通道起始地址和长度SSC工具生成的配置文件已经设置好一般不需要改动。但如果你需要增加PDO数量必须同步修改FCE1100寄存器中的SM配置和DSP协议栈中的对象字典。我的功能板PDO设置如下通道类型起始地址长度用途SM0邮箱写0x1000128CoE命令SM1邮箱读0x1080128CoE响应SM2过程数据写0x110064RxPDO主站到从站SM3过程数据读0x118064TxPDO从站到主站过程数据总共64字节包含目标位置32位、目标速度32位、控制字16位、状态字16位、当前位置32位、当前速度32位、电流反馈16位等。对齐方式按4字节对齐避免DSP端的数据解析错位。5.3 状态机切换与DC同步测试EtherCAT从站状态机从INIT到OP的切换顺序是INIT - PRE-OP - SAFE-OP - OP。每一步都需要主站和从站完成特定任务INIT到PRE-OP初始化邮箱通信主站发送CoE请求读取从站对象字典。PRE-OP到SAFE-OP配置SM通道和PDO映射主站下发PDO配置。SAFE-OP到OP开始周期数据交换主站在每个周期发送输入数据并接收输出数据。FCE1100的DC分布式时钟功能用于实现从站间的同步。如果你的应用有多个从站需要同步运动必须启用DC功能。FCE1100支持DC模式的SYNC0和SYNC1信号输出FCP32C335可以捕获SYNC0信号作为控制周期的基准时钟。我在测试时把FCE1100配置为主站参考时钟模式SYNC0输出周期设为1msSYNC1设为500us。FCP32C335通过GPIO捕获SYNC0上升沿触发ADC采样和电流环计算。示波器实测SYNC0信号的抖动约±50ns满足伺服控制的需求。如果抖动超过±200ns需要检查DC滤波参数配置和网线质量。5.4 测试中遇到的三个典型问题整个联调过程遇到的最难缠的三个问题这里展开说。问题一从站状态始终停留在PRE-OP无法进入SAFE-OP排查过程TwinCAT报错“Check SM configuration failed”。用Wireshark抓包分析PRE-OP到SAFE-OP切换过程中的帧发现主站发送的内存配置命令FPRD/FWRD正确但从站返回的数据中SM2的起始地址和长度与PDO映射不匹配。根因定位FCP32C335协议栈中的对象字典0x1C12和0x1C13定义的是RxPDO和TxPDO映射我没有同步修改SM2的起始地址导致主站下发的PDO数据超出了SM2配置的长度范围。解决方法对照SSC生成的配置文件在DSP的协议栈初始化代码中把SM2起始地址设为0x1100长度设为64并同步更新对象字典中的PDO映射表。问题二进入OP后从站偶发断站几秒后自动恢复排查过程断站后TwinCAT报“Working Counter error”。Wireshark抓包发现从站在某个帧周期内没有响应紧接着的下一个周期又恢复正常。根因定位FCP32C335的主循环被SPI通信阻塞了200us以上导致FCE1100的看门狗超时。查代码发现我在SPI驱动里加了一个等待CS释放的死循环没有加超时退出机制。当FCE1100正处于忙碌状态时CS不会及时拉低DSP的SPI请求就卡住了。解决方法给SPI通信增加超时退出机制单次SPI写操作最长等待500us超时则退出并返回错误同时复位FCE1100的看门狗。问题三DSP固化程序后必须接JTAG才能启动排查过程程序烧写到Flash后断开JTAG重新上电功能板无反应。接上JTAG仿真器后又能正常运行。根定定位这是DSP启动模式的问题。FCP32C335上电时会读取启动模式引脚的电平决定是从Flash启动还是从JTAG启动。功能板上启动模式引脚悬空或电平不稳导致DSP选择了错误的启动方式。另外DSP的启动代码在Flash中运行一段后会开启中断但中断向量表还没有重映射导致程序跑飞。解决方法将启动模式引脚用10kΩ电阻下拉到地确保上电时选择Flash启动模式同时在DSP的启动代码中最先执行中断向量表重映射把向量表从Flash复制到RAM然后再初始化外设。建议参考芯片手册中“SPI Flash启动”章节的步骤执行。6. 测试数据与结论通信稳定性、同步性能与可靠性联调通过后我进行了一组完整的性能测试记录关键指标作为项目验收依据。6.1 通信稳定性测试使用TwinCAT的帧计数器记录24小时运行数据测试项数值运行时长24小时通信周期1ms总帧数86,400,000丢帧数0工作计数器错误0最大帧延迟8.4us平均帧延迟2.1usTwinCAT的帧延迟统计里包含了网卡驱动和操作系统开销8.4us的最大延迟主要出现在Windows系统的中断处理高峰。如果是实时系统如使用Linux RT或专用主站延迟可以进一步压缩到2us以内。6.2 DC同步性能测试用示波器同时测量FCE1100的SYNC0信号和FCP32C335的PWM输出同步信号记录1000个周期的峰峰值抖动SYNC0周期抖动±48ns峰峰值约96ns。PWM同步信号相对SYNC0的延迟约1.2us稳定。两路从站互同步双从站模式从站间偏移±120ns。这个精度对绝大多数伺服和运动控制应用是足够的。如果要从站间偏差更小可以在FCE1100的DC寄存器里开启循环时间补偿功能调整SYNC0的相位偏移。6.3 高温老化测试功能板在75℃环境下连续运行72小时期间持续进行位置模式正弦波轨迹控制未出现通信异常。EtherCAT通信的CRC校验错误率始终为0。温度对SPI通信的影响需要注意75℃时FCE1100和FCP32C335之间的SPI通信裕量变小实测15MHz SPI速率下仍有300mV左右的信号裕量。如果环境温度继续升高到85℃以上建议把SPI速率降低到10MHz同时检查信号完整性。7. 复用经验如何把你的功能板测试流程也标准化这套测试流程虽然针对FCE1100和FCP32C335做了定制但整体思路可以复用。我总结成一份检查清单做同类板卡时可以少走弯路。硬件检查清单电源域是否正确上电时序是否符合两芯片手册要求。时钟源是否独立频率是否准确。SPI走线长度和阻抗匹配是否合理。FCE1100的EEPROM是否为空必须先用SSC工具烧录完整镜像。启动模式引脚是否固定为Flash启动。软件检查清单SSC工具生成的从站代码版本是否与芯片寄存器定义兼容。SPI底层驱动是否有超时退出机制。SM地址和PDO映射是否同步。DC模式配置是否正确SYNC0/SYNC1信号是否接对引脚。测试检查清单先用Wireshark抓包确认从站上电状态机的正确性。再验证INIT到PRE-OP的邮箱通信。然后验证PRE-OP到SAFE-OP的PDO映射。最后验证SAFE-OP到OP的周期数据交换。进行24小时长稳测试和高温老化测试。这套测试流程在项目里帮助我们提前暴露了不少问题尤其是EEPROM烧录和SPI超时这两个坑如果在产线中发现代价会大得多。有条件的朋友可以在硬件设计阶段预留FCE1100的SPI测试点方便后续调试和产线测试接入。