当前位置:   article > 正文

rt-thread驱动篇(06)---STM32F429单片机lwip网络协议栈添加_rt-thread lwip

rt-thread lwip

目录

参考示例

前言

一、RT-Thread中的lwip

二、驱动添加

2.1 CubeMX配置

2.2、添加复位驱动

三、ENV配置

3.1、添加以太网驱动

3.2、选中 lwIP 与 net dev

3.3、选中 SAL 与 DFS

3.4、选中 network_samples


参考示例

网络协议栈驱动移植笔记

在 STM32F407 上应用网络功能

前言

以太网芯片有很多种,常见的大致可以分成 3 种:

  • 以太网芯片只有 PHY(物理接口收发器 ),需要单片机带 MAC(以太网媒体接入控制器 ),通过 MII 或者 RMII 接口和单片机通讯。例如 LAN8720。
  • 以太网芯片带 MAC 和 PHY,通过 SPI 接口和单片机通讯。例如 ENC28J60。
  • 以太网芯片带 MAC 和 PHY,通过 SPI 接口和单片机通讯,同时内置硬件协议栈,适合低速单片机。例如 W5500。

板卡上使用的是LAN8720以太网芯片,只有 PHY(物理接口收发器 ),单片机带 MAC(以太网媒体接入控制器 ),通过RMII 接口和单片机通讯,复位引脚是PH3

一、RT-Thread中的lwip

RT-Thread在移植lwIP的过程中根据RT-Thread的特点进行了适当调整。

RT-Thread操作系统中的lwIP是从lwIP发布原始版本移植过来,然后添加了设备层以替换原来的驱动层。不同于原版,这里RT-Thread对于以太网数据的收发采用了独立的双线程(erx线程与etx线程)结构:

  • erx线程用于以太网报文的接收──当以太网硬件设备收到网络报文产生中断时,中断服务例程将会通过邮箱的形式唤醒erx线程,让erx线程主动进行以太网报文收取过程,当erx线程收到有效网络报文后,它通过邮箱的形式通知给LwIP的主线程(tcp线程);
  • tcp的发送操作则是通过邮箱的形式唤醒etx线程进行实际的以太网硬件写入。在正常情况下,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引脚的配置

2.1 CubeMX配置

2.2、添加复位驱动

  1. #define ETH_RESET_IO GET_PIN(H, 3) //PHY RESET PIN
  2. /* phy reset */
  3. void phy_reset(void)
  4. {
  5. rt_pin_write(ETH_RESET_IO, PIN_HIGH);
  6. rt_thread_mdelay(100);
  7. rt_pin_write(ETH_RESET_IO, PIN_LOW);
  8. rt_thread_mdelay(100);
  9. }
  10. int phy_init(void)
  11. {
  12. rt_pin_mode(ETH_RESET_IO, PIN_MODE_OUTPUT);
  13. rt_pin_write(ETH_RESET_IO, PIN_LOW);
  14. return RT_EOK;
  15. }
  16. INIT_BOARD_EXPORT(phy_init);

三、ENV配置

在ENV中选中的组件或软件包,如果开启了包管理器自动更新或者手动使用 pkgs --update 命令,就能自动将选择的软件包更新到BSP中;然后再使用 scons --target=xxx 命令编译BSP时,选择的软件包相关源代码就会被自动添加进工程中并进行编译

3.1、添加以太网驱动

选中网卡驱动,开启 BSP_USING_ETH 和 PHY_USING_LAN8720A宏定义,开启后在scons构建工程时,drv_eth.c phy_reset.c 就能自动添加进工程中

3.2、选中 lwIP 与 net dev

启用 lwIP 与 net device: 

3.3、选中 SAL 与 DFS

打开 SAL 层,并打开 BSD socket:

 fd 的管理在文件系统中,所以需要添加文件系统:

3.4、选中 network_samples

这个软件包包含一些网络操作的例程,在添加完网络驱动后可以用来进行网络功能的测试

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/67307
推荐阅读
相关标签
  

闽ICP备14008679号