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