S32K148----SDK笔记----LwIP以太网测试

文章目录

    • 前言
    • 建立工程
    • ProcessorExpert配置
    • 补全代码
    • 调试运行
    • 工程代码
    • 微信公众号

前言

S32K148含字母E或者J的有以太网, 如FS32K148UJ, 使用RMII接口连接PHY芯片, 官方的开发板带的PHY是TJA1101, 车载以太网, 传输使用两根线而不是标准4根线的百兆以太网, 这里我们还是用传统的方式来测试, 外接的是KSZ8041PHY, 代码方面可以说没有差别, 某宝淘的板子:

引脚的具体连接参考下面的ENET的配置, S32K外接8M晶振, PHY接的是50M的有源晶振, 官方例程用的是FreeRTOS下的LwIP, 多线程自然好, 这里简单点, 直接用RAW API做裸奔的UDP_Echo测试.

建立工程

步骤:

  • File -> New -> S32DS Application Project
  • Processors 选择 S32K148, Project Name 填你自己的工程名
  • Select SDK: SDKs 选择 S32K148_SDK 3.0.0, Debugger选择J-Link, Finish.

ProcessorExpert配置

双击工程名, 点击Components窗口Components目录下的 pin_mux:PinSetting, ENET配置:
S32K148----SDK笔记----LwIP以太网测试_第1张图片
Component Library中双击添加tcpip组件:
S32K148----SDK笔记----LwIP以太网测试_第2张图片
tcpip General的配置, 没有选FreeRTOS, 自动默认Baremetal:
S32K148----SDK笔记----LwIP以太网测试_第3张图片
Data Link的配置, RMII, 100, 勾选ARP Queueing:
S32K148----SDK笔记----LwIP以太网测试_第4张图片
IP Network配置, 默认不改, 注意下IP是192.168.0.200, ICMP不能少, 我们ping要用到:
S32K148----SDK笔记----LwIP以太网测试_第5张图片
Transport里面, 我们这里只用UDP, 去掉TCP的勾选:
S32K148----SDK笔记----LwIP以太网测试_第6张图片
Applications里面, 只勾选UDP_ECHO, 去掉LWIPERF(默认用到TCP, 可以配合 Jperf 之类的软件测网络性能) :
S32K148----SDK笔记----LwIP以太网测试_第7张图片
Memory Options默认不改或者Memory heap size改为官方例程的16384:
S32K148----SDK笔记----LwIP以太网测试_第8张图片
tcpip组件的配置就到这里, 接下来重点要配置 clodkMan1:clock_manager:
S32K148----SDK笔记----LwIP以太网测试_第9张图片
这里相对默认的改动比较多, 可以参考官方的lwip例程的时钟配置.

点击生成代码:

S32K148----SDK笔记----LwIP以太网测试_第10张图片

补全代码

main.c中:

/* User includes (#include below this line is not maintained by Processor Expert) */
#include "clockMan1.h"
#include "pin_mux.h"

extern void start_example(void);

//===================================================

  /* For example: for(;;) { } */
    CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
    		g_clockManCallbacksArr, (uint8_t)CLOCK_MANAGER_CALLBACK_CNT);
    CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_FORCIBLE);
    PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);

    start_example();

在 SDK/middleware/tcpip/tcpip_stack/demo/test.c 中:

  • start_example(); 直接调用了 mainLoopTask(NULL);
  • mainLoopTask 中初始化网络和app, 就直接进入常见的while网络接口轮询 (void)enet_poll_interface(&netif);

所以test.c不用修改, 所有工作都默认做好了.

SDK/middleware/tcpip/tcpip_stack/apps/udpecho_raw/udp_echo_raw.c就是实现的UDP Echo功能:

  • 初始化中绑定的是端口7: err = udp_bind(udpecho_raw_pcb, IP_ANY_TYPE, 7);
  • 初始化声明的接收回调函数 udp_recv(udpecho_raw_pcb, udpecho_raw_recv, NULL);
  • 接收回调函数 static void udpecho_raw_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p,const ip_addr_t *addr, u16_t port) 中直接把接收到的原封不动的还回去: udp_sendto(upcb, p, addr, port);

需要改UDP相关的app就可以在这个文件或者在udpecho_raw文件夹里面新添文件. 有初始化的就放到test.c的static void apps_init(void) 中去, 这里我们不改动.

调试运行

连接网线到笔记本, 笔记本禁用WiFi, 以太网IPV4配置:
S32K148----SDK笔记----LwIP以太网测试_第11张图片

我们先ping一下 192.168.0.200, 可以ping通:
S32K148----SDK笔记----LwIP以太网测试_第12张图片
然后使用网络调试助手测试下UDP Echo:
S32K148----SDK笔记----LwIP以太网测试_第13张图片
由于udpecho_raw.c里面指定了接收的端口为7, 所以远程主机那里填 192.168.0.200:7 即可, 而回传的IP地址和端口是和接收的一样, 本地主机地址可以是192.168.0.x, 端口也可以随意一些.

工程代码

https://download.csdn.net/download/weifengdq/11926786

微信公众号

欢迎扫描二维码关注本人微信公众号, 及时获取或者发送给我最新消息:
在这里插入图片描述

你可能感兴趣的:(S32K148)