自建极简Ethercat主站-第1章 底层驱动编写与数据组包

张开发
2026/4/16 23:27:29 15 分钟阅读

分享文章

自建极简Ethercat主站-第1章 底层驱动编写与数据组包
文章目录第1章 驱动编写与数据组包1.1 底层编写1.1.1 网卡初始化1.2.1 数据读写1.3.1 系统时钟1.2 数据打包1.2.1 Ethercat报文简介1.2.2 Datagrams报文简介1.2.3 代码示例1.2.4 网络字节序与本地字节序第1章 驱动编写与数据组包1.1 底层编写​ 从根本来讲,Ethercat主站就是用来读写从站的。因此驱动的最核心功能有三个:网卡初始化、写入据到从站、读取从站数据。还有一个非必要功能,就是系统时钟,用来超时计数,也算是个简单的容错。当然,如果你不做超时也可以,选择发送和接收时一直死等也可以。1.1.1 网卡初始化​ 关于GD32的以太网理解和初始化流程,请看文章Ethercat学习-GD32以太网学习 下面是部分代码,代码的初始化流程也是按照文章中的流程来的。其中网卡最好配置为混杂模式,这样不管什么MAC地址都能接收到,或者将Ethercat的目的MAC填写为本机的MAC地址/* 初始化代码片段 */intenet_system_init(void){ErrStatus reval_state=ERROR;/* 初始化以太网模块时钟 */enet_clock_init();/* 初始化以太网引脚 RMII接口*/enet_gpio_init();/* 初始化以太网MAC和DMA */reval_state=enet_mac_dma_config();returnreval_state;}/* MAC 和 DMA 的初始化 */staticintenet_mac_dma_config(void){inti;ErrStatus reval_state=ERROR;/* 复位,并等待完成 */enet_deinit();reval_state=enet_software_reset();if(ERROR==reval_state){returnERROR;}/* 以太网初始化 配置网卡自协商模式、使能接收端校验和检测功能、接收所有的广播帧*/reval_state=enet_init(ENET_AUTO_NEGOTIATION,ENET_AUTOCHECKSUM_DROP_FAILFRAMES,ENET_BROADCAST_FRAMES_PASS);if(ERROR==reval_state){returnERROR;}/* 设置MAC地址 */enet_mac_address_set(ENET_MAC_ADDRESS0,mac);/* 初始化收发的描述符,常规描述符,链结构*/enet_descriptors_c

更多文章