如何解决EVB-LAN9252与STM32间SPI通信异常问题?
EtherCAT从站SPI通信异常排查求助
项目概况
- 硬件平台:EVB-LAN9252 + NUCLEO-G491RE开发板
- 协议栈:SOES
- 开发工具:通过rt-labs EtherCAT SDK(从站编辑器)生成ESI文件、EEPROM用bin文件及部分C文件,使用该SDK的从站资源管理器测试
- 项目参考:与OpenEtherCATsociety/SOES仓库的issue 55高度相似
问题现象
编译项目并启动主站(EtherCat Explorer)后,从站可进入运行模式,但无法读取对象字典,经定位确认SPI通信不符合预期。
SPI验证测试
为验证SPI工作状态,尝试读取BYTE_TEST寄存器(地址0x64):
- 预期返回值:0x87654321
- 实际返回值:0x431400
测试代码基于SOES函数适配Cube IDE编写:
uint32_t lan9252_read_32 (uint32_t address) { uint8_t data[7]; uint8_t result[7]; memset(data, 0, sizeof(data)); data[0] = ESC_CMD_READ; //0x03 data[1] = ((address >> 8) & 0xFF); data[2] = (address & 0xFF); HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, RESET); HAL_SPI_TransmitReceive(&hspi1, data, result, sizeof(data), HAL_MAX_DELAY); HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, SET); return((result[6] << 24) | (result[5] << 16) | (result[4] << 8) | result[3]); }
附示波器波形图(记录SPI通信时序)
SPI配置参数(STM32全双工主模式)
- 数据位宽:8 Bits
- 字节序:MSB优先
- 波特率:1.328125 MBits/s
- 时钟极性:HIGH
- 时钟相位:2 Edge(已尝试所有极性与相位组合,排除该配置问题)
EEPROM配置确认
EEPROM中EtherCAT从站控制器配置区域值为80 0F 00 CC 88 13 FF 00 00 00 00 80 00 00 57 00,首字节为PDI控制寄存器(0x140-0x141)初始化值,0x80已将过程数据接口设置为SPI,排除该配置异常。
内容的提问来源于stack exchange,提问作者Gmari
相关产品推荐
相关产品推荐

