移植前先把网络调通
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。
|