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

主要内容: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的端口

S32K148+LAN8720+lwip移植+modbus调试的更多相关文章

  1. lwip移植到stm32上-enc28j60,103mcu(2)

    前面小玩了一下ucos和lwip,但是都还不是真正的网络多任务,真正的网络多任务应该是什么样子的呢?应该是有一个专门的任务负责网络的通讯,他负责将数据发送出去,将数据接收回来,而其他的需要用到网络的任 ...

  2. LwIP移植和使用

    LwIP移植和使用 本手册基于lwip-1.4.x编写,本人没有移植过1.4.0之前的版本,更早的版本或许有差别.如果看官发现问题欢迎联系<QQ: 937431539  email: 93743 ...

  3. 关于lwip移植到ucsos-ii平台的遇到的问题(一)

    移植的步骤参照<Day_Day_Up笔记之uCOS-II_LwIP_在_STM32F107_上移植>,<uCOS平台下的LwIP移植笔记>,<嵌入式网络那些事>. ...

  4. lwip 移植

    一.源码目录结构 api . core.netif. include core下又有IPV4 . IPV6 . SNMP 和.c文件 include下又有IPV4.IPV6.LWIP.netif ne ...

  5. LwIP移植uCos+stm32f407

    LwIP同操作系统一起工作的时候模型如下: 1.TCP/IP协议栈和应用程序以分离的任务运行 2.应用同协议栈沟通是通过API函数调用(API函数调用事实上就是通过OS自带的进程间通信机制,由应用程序 ...

  6. LWIP移植文件介绍

    在介绍文件之前首先介绍一下DMA描述符 stm32以太网模块接收/发送FIFO和内存之间的以太网传输是通过以太网DMA使用DMA描述符完成的,一共有两个描述符列表:一个用于接收,一个用于发送, 两个列 ...

  7. Modbus调试利器 Modbus Poll

    Modbus Poll是一个非常不错的工具,支持TCP/串口 下载地址:http://pan.baidu.com/share/link?shareid=2880213929&uk=248325 ...

  8. [置顶] Android系统移植与调试之------->Amlogic方案编译步骤

    1. 拷贝Amlogic的SourceCode 切换目录到  /home/roco/work/amlogic/SourceCode/mx0831-0525下将mx0831-0525.tgz拷贝到  / ...

  9. Android系统移植与调试之------->如何添加一个adb wifi无线调试的功能【开发者选项】-【Wifi调试】

    首先弄懂怎么设置adb wifi无线调试的功能,如下所示. 1. 手机端开启adb tcp连接端口 :/$setprop service.adb.tcp.port :/$stop adbd :/$st ...

  10. Android系统移植与调试之------->如何修改Android系统默认显示【开发者选项】并默认打开【USB调试】和【未知来源】开关

    今天有个用户对[设置]有个特殊的要求,即: 1.开机的时候默认显示[开发者选项]并打开[USB调试]开关    ([Developer options]-->[USB debugging]) 2 ...

随机推荐

  1. 使用离线部署32B模型实现OpenDeepWiki项目代码自动分析与文档生成

    背景介绍 在企业环境中,我们经常需要对公司项目代码进行分析和文档生成.然而,考虑到代码的保密性,将代码上传至公共AI平台存在安全隐患.为解决这一问题,我们可以在公司内部GPU服务器上部署强大的大语言模 ...

  2. 推荐一个Elasticsearch ES可视化客户端工具:ES-King

    ES-King:开源免费,一个现代.实用的ES GUI客户端,支持多平台. 下载地址:https://github.com/Bronya0/ES-King 功能清单 详尽的集群信息:节点信息.堆内存占 ...

  3. 我的Vue之旅(3)

    2020-10-24 程序员节快乐哈! 因为有相当一部分内容都是相互穿插的,今天也就不写那么多重复的Demo了,直接写一下对所学内容的理解吧. 插值 关于插值这一块其实也没啥说的,文本插值都是最熟悉不 ...

  4. Java 线程池会自动关闭吗|转

      在展开描述之前,我们综述一下哪些场景,线程池会自动关闭: 没有引用指向且没有剩余线程的线程池 核心线程数为0且存活时间大于零的线程池 Executors.newCachedThrteadPool( ...

  5. Java11 ThreadLocal的remove()方法源码分析

    1. ThreadLocal实现原理 本文参考的java 版本是11. 在讲述ThreadLocal实现原理之前,我先来简单地介绍一下什么是ThreadLocal.ThreadLocal提供线程本地变 ...

  6. 面试题:JAVA中final关键字的作用

    final关键字的功能概述   在Java中,关键字 final 的意思是终态,可以用于声明变量.方法和类,分别表示基本类型变量值不可变,引用类型变量引用地址不可变但值可变,方法不可被覆盖,类不可被继 ...

  7. 远古python1.6 linux版下载

    链接:https://www.123pan.com/s/qdY9-n3fk3 语法和python2应该是差不多的,曾经提到过 体验:

  8. ChatMoney智能知识库让你轻松工作!

    本文由 ChatMoney团队出品 为了增强企业内部知识的传递和共享效率,最近花了两周时间测试Chatmoney知识库 +企微客服助手模式,测试效果让我很惊喜! 对话引用知识库内容,Chatmoney ...

  9. 一个基于 .NET 开源、模块化 AI 图像生成 Web 用户界面

    前言 今天大姚给大家分享一个基于 .NET 开源.模块化 AI 图像生成 Web 用户界面:SwarmUI. 项目介绍 SwarmUI (原 StableSwarmUI)是一个基于 .NET 开源(M ...

  10. Review-Gate MCP,让你的 cursor request 次数翻 5 倍

    最新资讯: cursor pro 改为无限制,但某些模型(新模型?)依旧限制,看起来是一个黑盒,具体没细说,因此你可以考虑装或者不装本文的 MCP. 另外,本文属于前端社区的一次分享,只是顺带迁移到个 ...