赞
踩
目录
以太网芯片有很多种,常见的大致可以分成 3 种:
板卡上使用的是LAN8720以太网芯片,只有 PHY(物理接口收发器 ),单片机带 MAC(以太网媒体接入控制器 ),通过RMII 接口和单片机通讯,复位引脚是PH3
RT-Thread在移植lwIP的过程中根据RT-Thread的特点进行了适当调整。
RT-Thread操作系统中的lwIP是从lwIP发布原始版本移植过来,然后添加了设备层以替换原来的驱动层。不同于原版,这里RT-Thread对于以太网数据的收发采用了独立的双线程(erx线程与etx线程)结构:
RT-Thread中将lwIP应用起来主要包括三个核心步骤:
1. 创建收发包线程,调用接口eth_system_device_init_private(),这步在已经在lwip_system_init()中调用了
2. 提供网卡驱动,调用网卡初始化函数eth_device_init,注册网卡设备(为网卡添加名称,IP、子网掩码、网关,网卡设备使用的发包和收包接口函数等)
3. 初始化lwIP,创建lwIP线程,调用接口lwip_system_init()。系统已经通过自动初始化机制自动调用了(INIT_PREV_EXPORT(lwip_system_init);)。
至此,三个步骤完成之后,应用层便可以直接与外界通讯。
网卡外设驱动部分rtthread已经在\libraries\HAL_Drivers\drv_eth.c/h中写好了,唯一要改的就是在phy_reset.c中添加PHY网卡的复位。在drv_eth.c中会调用HAL库的HAL_ETH_Init函数来初始化ETH外设,调用顺序如下:
rt_stm32_eth_init()/dev_eth.c ---> HAL_ETH_Init()/stm32f4xx_hal_eth.c ---> HAL_ETH_MspInit()/stm32f4xx_hal_msp.c;所以在添加以太网外设之前,需要先通过CubeMX配置ETH生成HAL_ETH_MspInit函数,完成对ETH外设时钟、IO引脚的配置
- #define ETH_RESET_IO GET_PIN(H, 3) //PHY RESET PIN
-
- /* phy reset */
- void phy_reset(void)
- {
- rt_pin_write(ETH_RESET_IO, PIN_HIGH);
- rt_thread_mdelay(100);
- rt_pin_write(ETH_RESET_IO, PIN_LOW);
- rt_thread_mdelay(100);
- }
-
- int phy_init(void)
- {
- rt_pin_mode(ETH_RESET_IO, PIN_MODE_OUTPUT);
- rt_pin_write(ETH_RESET_IO, PIN_LOW);
- return RT_EOK;
- }
- INIT_BOARD_EXPORT(phy_init);
在ENV中选中的组件或软件包,如果开启了包管理器自动更新或者手动使用 pkgs --update 命令,就能自动将选择的软件包更新到BSP中;然后再使用 scons --target=xxx 命令编译BSP时,选择的软件包相关源代码就会被自动添加进工程中并进行编译
选中网卡驱动,开启 BSP_USING_ETH 和 PHY_USING_LAN8720A宏定义,开启后在scons构建工程时,drv_eth.c 和 phy_reset.c 就能自动添加进工程中
启用 lwIP 与 net device:
打开 SAL 层,并打开 BSD socket:
fd 的管理在文件系统中,所以需要添加文件系统:
这个软件包包含一些网络操作的例程,在添加完网络驱动后可以用来进行网络功能的测试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。