移植前先把网络调通
EtherCat是基于SOEM的开源主站进行移植,目前我移植的版本是1.3.1。
第一步,网口配置
复制
MX_ETH_Init();
int32_t status = 0;
void ETHThread_Entry(void *argument)
{
(void) argument;
ETH_MACConfigTypeDef MACConf;
ETH_DMAConfigTypeDef dmaDefaultConf;
dmaDefaultConf.DMAArbitration = ETH_DMAARBITRATION_RX1_TX1;
dmaDefaultConf.AddressAlignedBeats = ENABLE;
dmaDefaultConf.BurstMode = ETH_BURSTLENGTH_FIXED;
dmaDefaultConf.TxDMABurstLength = ETH_TXDMABURSTLENGTH_32BEAT;
dmaDefaultConf.RxDMABurstLength = ETH_RXDMABURSTLENGTH_32BEAT;
dmaDefaultConf.FlushRxPacket = DISABLE;
dmaDefaultConf.PBLx8Mode = DISABLE;
dmaDefaultConf.RebuildINCRxBurst = DISABLE;
dmaDefaultConf.SecondPacketOperate = ENABLE;
dmaDefaultConf.TCPSegmentation = DISABLE;
dmaDefaultConf.MaximumSegmentSize = 536;
/* enable OSF bit to enhance throughput */
HAL_ETH_SetDMAConfig(ð_handle, &dmaDefaultConf);
/* Infinite loop */
nx_eth_phy_init();
status = nx_eth_phy_get_link_state();
/* Get MAC Config MAC */
HAL_ETH_GetMACConfig(ð_handle, &MACConf);
MACConf.DuplexMode = ETH_FULLDUPLEX_MODE;
MACConf.Speed = ETH_SPEED_100M;
HAL_ETH_SetMACConfig(ð_handle, &MACConf);
HAL_ETH_Start_IT(ð_handle);
while(1)
{
status = nx_eth_phy_get_link_state();
vTaskDelay(150);
}
}
/* USER CODE
根据官方给的例程代码,首先将网口初始化,MX_ETH_Init()。
初始化MAC之后最主要的是PHY的初始化。
根据例程的翻阅,只需要调用nx_eth_phy_init();即可。
根据nx_eth_phy_get_link_state()获取的状态进行全双工/半双工,10M/100M/1000M的适配,目前LAN8742只支持100M。
配置MAC后,启动中断。
根据link_state就可查询到是否插入网线。
下一步开始测试MAC收发函数功能和移植SOEM的ETHERCAT。
---------------------
作者:穿西装的强子
链接:https://bbs.21ic.com/icview-3318056-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
本文介绍了如何移植基于SOEM的开源主站EtherCat至1.3.1版本,包括网口配置、MAC配置、DMA设置,特别关注了LAN8742的100M速度限制。
&spm=1001.2101.3001.5002&articleId=132515609&d=1&t=3&u=195b6e1db2cb4c01a64f05ee9d6dcb6f)
1014

被折叠的 条评论
为什么被折叠?



