S32K148+LAN8720+lwip移植+modbus-tcpip调试

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

主要内容: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电路

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地址

3 软件准备

3.1 开发环境

S32DS for ARM

3.2 基础配置

3.2.1引脚

3.2.2时钟

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协议自动收发的

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

4 modbus协议

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

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

相关推荐
猪猪童鞋2 个月前
基于正点原子阿波罗F429开发板的LWIP应用(4)——HTTP Server功能
网络·网络协议·http·lwip
lljss20202 个月前
lwip_bind、lwip_listen 是阻塞函数吗
lwip
我的老子姓彭2 个月前
LWIP的NETCONN接口
笔记·lwip
大牛攻城狮4 个月前
使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp client网络数据转串口数据过程详解
stm32·freertos·lwip·stm32cubeide·网络转串口·lan8720a·udp服务端客户端
听风lighting4 个月前
嵌入式八股RTOS与Linux---网络系统篇
linux·运维·网络·socket·lwip
_阿疯_5 个月前
嵌入式 lwip http server makefsdata
网络协议·http·嵌入式·lwip·makefsdata
黄金右肾7 个月前
STM32之LWIP网络通讯设计-上(十四)
stm32·单片机·eth·lwip
别问,问就是全会9 个月前
基于FreeRTOS的LWIP移植
stm32·单片机·freertos·lwip
Nuttx_Fan_now1 年前
在RT-Thread下为MPU手搓以太网MAC驱动-4
arm·rt-thread·以太网·mpu·lwip·驱动·协议栈