S32K148+LAN8720+lwip移植+modbus

    正在检查是否收录...

计划一个月写一篇技术博客的,七月份又忘了,最近忙着调试新的硬件平台和移植新的功能,今天把七月份内容补上。

主要内容:S32K148+LAN8720+lwip移植+modbus调试

本次调试难点:

1)基于S32K148芯片调试lwip内容网上资料特别少,大部分底层知识需要自己查资料,看datasheet,查官方论坛;

2)S32K148+LAN8720这种组合更少,网上资料90%内容都是STM32+LAN8720,但是这部分内容需要参考学习,对于新平台有很大的帮助;

3)需要了解lwip硬件实施架构,phy电路,lwip协议栈知识以及软件移植;

4)modbus-tcpip协议基础知识

其中第3点和第4点,我觉得可以找到很详细的资料学习,第1点和第2点更多涉及硬件电路,需要较强的能力和经验,也是本次调试耗时最长的部分。

接下来我从硬件电路和软件移植两个大方面总结记录整个过程。

1 S32K148硬件电路

这部分主要定义好ENET的引脚资源,主要包括RMII接口或MII接口、SMI接口,这里需要注意一个引脚RMII_REF_CLK,这个引脚我找了好久在datasheet上一个角落发现,它把RMII_TX_CLK复用为RMII_REF_CLK

其实这部分电路也涉及到PHY电路,因为tcpip通信有一个重要信号就是时钟信号,这个时钟信号和RMII/MII接口,100M/10M网速有关,也和PHY芯片有关。本次时钟信号采用的PHY信号输出到S32K148,并把它作为RMII_REF_CLK。

2 LAN8720电路

        1754037252494

 

2.1 RMII接口;

  根据引脚引脚定义分别连接S32K148和LAN8720

2.2 电源部分主要包含3.3V和1.2V

  3.3V电源都是常规电路,主电源LDO输出一个3.3V给LAN8720,

  1.2V电源非常重要,涉及到你是采用外部1.2V,还是内部1.2V,绝大多数设计都是采取8720本身自带的1内部1.2V稳压。这里面就涉及到如果采用内部1.2V,8720的LED1引脚需要下拉接地,注意VDDCR可以直接悬空

2.3 时钟信号+晶振电路

RMII接口输出100M数据信号需要一个50M的时钟信号,8720本身可以通过25M晶振倍频到50M,然后在输出给S32K148,这部分可参考别的资料。

2.4 LED电路

  LED1引脚下拉接地或上拉接电源,涉及1.2V电源使用选择,我们直接拉地

  LED2引脚下拉接地或上拉接电源,涉及CLK_IN_mode和CLK_OUT_mode,我们直接拉地

2.5 SMI接口

  MDC和MDIO按照引脚连接

2.6 RJ45接口

  根据项目需求,选好RJ45插座

2.7 硬件复位

  复位引脚连到S32K148的一个gpio

2.8 PHY地址

        1754036707020

3 软件准备

3.1 开发环境  

  S32DS for ARM

3.2 基础配置

  3.2.1引脚

        1754035673971

  3.2.2时钟

        1754037131341

3.2 lwip移植

  S32K148使用S32DS for ARM开发环境可以直接配置外设,其中包括配置ENET和TCPIP中间件,

  3.2.1 ENET配置跟着官方教程即可

  3.2.2 tcpip配置

    本次调试使用裸机配置,删除FreeRTOS组件即可切换成裸机配置,后续Datalink、IP Network、Transport都可参考官方例程,IP层有一个ICMP协议需要打勾,后续调试ping的原理就是根据ICMP协议自动收发的

        1754037432492

        1754038655971

        1754038683279

        1754038716095

   app中你可以选择UDP_ECHO(UDP回环),或者TCP_ECHO

  3.3初始化

  初次调试,可直接参考官方test.c文件,学习里面初始化过程,调用哪些函数(需要具备lwip基础知识才能看懂),后续再根据自己实际项目,重新做一个初始化函数

  重点函数netif_add();enet_ethernetif_init();enetif_low_level_init();

  SMI介质接口管理主要就是读取PHY寄存器和写入PHY寄存器,这部分很简单

  3.4 调用函数

  本次可以直接调用官方例程函数,先调试通,后续博客章节我在慢慢梳理这部分内容,包括初始化函数、tcpip服务器模式、tcpip客户端模式

  3.5 lwip测试

  根据你的IP地址,ping 192.168.100

        1754038577452

        1754038505260

 4 modbus协议

  其实熟悉modbus-rtu协议之后,调试modbus-tcpip会非常简单,之前博客我写过modbus-rtu的移植过程,但是此次modbus-tcpip我会换一种思路

  我用modbus-poll做的测试,右下角就是IP地址和modbus-tcpip的端口

1754038902295

 

评论

昵称
邮箱
主页