丁丁 软硬件、前后端全栈开发者。热爱,并将终身学习有关计算机的一切 mdi-home 首页 mdi-language-go Golang mdi-cpu-32-bit STM32 mdi-format-list-bulleted-square 文章列表 mdi-share-variant 分享 mdi-book-open-page-variant 推荐书单 mdi-chat-processing 碎语 mdi-help-box ISSUE About Me mdi-message 知乎 mdi-sina-weibo 微博 mdi-television-play bilibili mdi-rss-box RSS

STM32与LAN9252构建EtherCAT从站(一):项目简介——丁丁的个人网站

mdi-heart mdi-login mdi-logout mdi-settings
mdi-chevron-left Last:51单片机中的data,bdata,idata等用法 Next:STM32与LAN9252构建EtherCAT从站(二):使用SSC生成协议栈和XML文件 mdi-chevron-right
# 目录 1. 一、[ STM32与LAN9252构建EtherCAT从站(一):项目简介](https://www.hexcode.cn/article/5e3ee9a835616641b2daef97) 2. 二、 [STM32与LAN9252构建EtherCAT从站(二):使用SSC生成EtherCAT协议栈和XML文件](https://www.hexcode.cn/article/5e3eea2c35616641b2daef98) 3. 三、 [STM32与LAN9252构建EtherCAT从站(三):LAN9252的XML文件](https://www.hexcode.cn/article/5e3eea9835616641b2daef99) 4. 四、 [STM32与LAN9252构建EtherCAT从站(四):STM32配置SPI](https://www.hexcode.cn/article/5e3eed1535616641b2daef9a) 5. 五、 [STM32与LAN9252构建EtherCAT从站(五):STM32与LAN9252适配](https://www.hexcode.cn/article/5e3eed9035616641b2daef9b) 6. 六、 [STM32与LAN9252构建EtherCAT从站(六):TwinCAT2的使用和从站测试](https://www.hexcode.cn/article/5e3eedde35616641b2daef9c) # STM32与LAN9252构建EtherCAT从站(一):项目简介 ## EtherCAT及项目简述 EtherCAT是一种基于以太网的工业通信协议,类似于Profinet。 EterhCAT协议是一主多从模式,主站一般是由一个装有TwinCAT的PC机担任,PC机对网卡特殊要求,需要支持EtherCAT的网卡。本项目的主站是一台倍福CX9020(仅支持TwinCAT2.0),这是一台ARM架构的PC,内装Windows CE操作系统,操作系统中装了TwinCAT2. 项目需要开发其从站,周期交互IO:64入64出,选用STM32F103+LAN9252构建。 ## LAN9252工作模式 根据LAN9252的Datasheet所述,LAN9252一共有四种工作模式: - 自我工作模式(数字I/O模式),8入8出 - SPI 串口通信模式,4线串行数据(或更多SQI) - 并行通信模式(HBI),16/8位数据交互 - 扩展模式,LAN9252与MCU之间SPI通信,同时对外再提供一组MII接口,可扩展连接另一组PHY芯片,多接一个RJ45端子。 [![](https://files.hexcode.cn/a4f2adff-1881-41ae-9225-1cd923fe8f36.png)](http://) 根据需求,项目选择SPI串口模式。 ## 整体开发流程 1. 淘宝购买相关学习板,得到文档和协议栈。 2. 根据项目需求构建XML,该XML将会由TwinCAT2解析,并将相关特诊烧录进LAN9252连接的EEPROM中。 3. 根据学习板附带的文档,尽可能理解EtherCAT协议栈和通信步骤。 4. 根据项目需求绘制自选MCU与LAN9252的原理图和PCB。 5. 移植相关代码到自己的MCU中,TwinCAT中编写PLC测试和调试。 整个体系中,LAN9252起到以下作用: - PHY的作用,所有跟以太网RJ45交互的工作,都由LAN9252完成。 - 网络交换作用,EtherCAT要求从站必须有一拖一的能力,不可以终结总线,LAN9252有2端口/3端口模式,内部做网络交换。 - 数据解析及SPI下位机作用。MCU可以作为SPI主模式与LAN9252进行数据交互,其交互流程在协议栈中,非常复杂,没能完全理解。 ## 移植要处理的问题 1. 首选需要初步理解TwinCAT使用的XML的作用,此XML是对设备的描述,类似于GSD文件。描述了通信时需要使用的对象字典,数据类型,长度等等。xml文件一般都有好几兆大小,但TwinCAT只会解析XML并将其中一部分特征数据烧录进LAN9252挂载的EEPROM中去,所以并不需要担心EEPROM大小问题,一般选择512KB的快速EEPROM(24FC512)。 2. 根据自己的项目要求,设计XML,这个工作可以通过EtherCAT的开发工具SSC来简单实现,如果不使用SSC,手工修改XML将是一件非常麻烦的事情。 3. SSC在生成XML的同时,还可以生成代码,这份代码是没法直接用的,但里面有关字典的.c文件非常有价值,可以参考并移植到开发板的代码中去,完成自己的逻辑。 ## 代码层面的工作 整个EtherCAT协议栈相当复杂,几乎没办法阅读,只能从main()函数入手,简单地剥解一下代码,可以看到整个项目是由三个大函数构建而成的: ``` HW_Init(); MainInit(); while (1){ MainLoop(); } ``` 以上就是整个EtherCAT协议跑起来的骨架。 此外,在MCU的GPIO和内部资源部分,需要做到以下几点: 1. SPI四根线的使能,跟LAN9252的通信就靠它了。 2. 一个定时器中断,1ms周期,调用`ECAT_CheckTimer();`函数,但不要一上来就初始化使能这个中断,根据接口定义好使能入口,让协议栈调用,以上电就开启这个定时器中断会导致连接失败。 3. 三个外部中断,IRQ,SCY0,SCY1,其中IRQ必须实现,SCY0和SCY1是分布式时钟同步用的,可以选择使用,也可不使用,注意这三个中断的使能同样要根据代码中的接口定义入口,由协议栈使能和失能中断,万万不可一上电就来使能中断。中断中处理的代码如下: ```c void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == LAN9252_IRQ_Pin) { PDI_Isr(); return; } if (GPIO_Pin == LAN9252_SYC0_Pin) { DISABLE_ESC_INT(); Sync0_Isr(); ENABLE_ESC_INT(); return; } if (GPIO_Pin == LAN9252_SYC1_Pin) { DISABLE_ESC_INT(); Sync1_Isr(); ENABLE_ESC_INT(); return; } } ``` ## 开发中使用的工具 - STM32CubeMX5.1, Keil5(TrustStudio), Sublime3 - SSC, XMLSpy - TwinCAT2.0, VirtualBox - AltiumDesigner18
mdi-chevron-left Last:51单片机中的data,bdata,idata等用法 Next:STM32与LAN9252构建EtherCAT从站(二):使用SSC生成协议栈和XML文件 mdi-chevron-right
Tags JAVA Golang STM32 Links 丁丁喜欢这些网站或者博客 MCU起航 JBlog
Tags JAVA Golang STM32 Links 丁丁喜欢这些网站或者博客 MCU起航 JBlog
{{ $store.state.notice.msg }}