这里讲一下lan8720网卡驱动。
其实也没啥好讲的,参考原子哥和野火的lwip教程中的裸机移植部分就可以了。
我直接贴代码了,结合lwip的教程以及stm32手册中的以太网部分,消化理解吧。
提供配套CUBE工程和技术支持。SOEM协议栈使用1.3.1版本。可配套NUCLEO-H743ZI开发板使用。支持DC同步。可配合汇川IS620N、三洋RS3、赛孚德ASD620B、埃斯顿ProNet、迈信EP3E、台达A2-E、伟创SD700、松下A5B/A6B和欧姆龙G5系列驱动器使用
有几点说一下:
1.以太网接收报文用的时轮询的方式,不是中断。即(ETH_Handler.Init.RxMode = ETH_RXPOLLING_MODE;//轮询接收模式)
2.注意lan8720的时钟配置,不同硬件平台是有差异的,注意看lan8720的芯片手册和原理图。
3.原子的f767开发板是有外部SDRAM的,以太网数据帧用的是外部SDRAM的空间。
4.如果用的是stm32片内的SDRAM的话,可以这么写:
5.如果是stm32f1x、stm32f4x之类的芯片,可以把下面红线部分删掉。
6.mac配置工作在混杂模式
基于原子f767开发板的代码
ETH_HandleTypeDef ETH_Handler; //以太网句柄
ETH_DMADescTypeDef *DMARxDscrTab; //以太网DMA接收描述符数据结构体指针
ETH_DMADescTypeDef *DMATxDscrTab; //以太网DMA发送描述符数据结构体指针
uint8_t *Rx_Buff; //以太网底层驱动接收buffers指针
uint8_t *Tx_Buff; //以太网底层驱动发送buffers指针
u32 interrupt_state(void)
{
int state;
state=(ETH_Handler.Instance->DMAIER);
return (u32)state;
}
//LAN8720初始化
//返回值:0,成功;
// 其他,失败