Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
nuc980
NUC980 测评 之 EMAC
发布于 2022-03-11 19:37:25 浏览:1233
订阅该版
[tocm] ### 测评环境 开发板:NK-980IOT V1.0 开发环境:keil 5.25 + env 1.2.0.7 + NuWriter v1.18 rt-thread:4.0.5 release 测评任务:EMAC ### 开箱 开箱图片  NUC980 有两个 EMAC 外设,NK-980IOT V1.0 只使用了 EMAC0。 支持 RMII 接口,收发都有 DMA 和 各自 256 字节的 FIFO。 ### 搭建环境 #### 下载安装 RT-Thread Studio 安装 Stutio 并运行,用个账号登录,无账号先注册。 后面的所有操作都不影响,为什么每次打开软件都要提示这个信息?这个提示的意思是 studio 不能完整正常工作还是能正常工作?我需要必须安装个 git 吗?  创建项目我们选择基于开发板,如果没有安装 NK-980IOT 开发板包,选择安装更多。  选择 rt-thread 版本,删掉不需要的版本。  选择 NK-980IOT 开发板包,点击【安装资源包】。  最后,再次创建项目。  完成。 ### 项目配置 打开 settings 之后,把所有选项过一遍,取消掉不需要的配置,先精简配置。我只留下和 EMAC GPIO UART 相关的配置,所有其它默认开启的 SPI ADC RTC WDT... 全去掉了。  先跑个最小系统,检查一下系统能不能正常运行,finsh 能不能工作。 ### 启用 EMAC 外设 #### 选用 EMAC0  同时启用 phy 芯片支持。  #### 添加 webclient 包 添加 webclient 后,先编译了一下出现下面这个错误。 ``` ./packages/webclient-v2.2.0/src/webclient.o: In function `webclient_resolve_address': D:\RT-ThreadStudio\workspace\nk980iot\Debug/../packages/webclient-v2.2.0/src/webclient.c:221: undefined reference to `rt_strcpy' ``` 太神奇了,rt_strcpy 函数是 [#5404](https://github.com/RT-Thread/rt-thread/pull/5404) 2021/12/22 合并的 BernardXiong merged 1 commit into RT-Thread:master from mysterywolf:kservice on 22 Dec 2021 我下面的版本是 4.0.5 ,RT-Thread v4.0.5 released Latest @Guozhanxin Guozhanxin released this 29 Dec 2021 2021/12/29 发布的版本竟然没有这个函数的实现了!!! 自己添加 rt_strcpy 的实现。再次编译通过。 #### 测试代码 通过 webclient 下载文件。先在电脑端用 python 启用了一个简易 web 服务。然后在 rt-thread 系统终端里执行下载程序。 ``` static int http_ota_shard_download_handle(char *buffer, int length) { int ret = RT_EOK; begin_offset += length; print_progress(begin_offset, file_size); __exit: rt_free(buffer); return ret; } static int http_ota_fw_download(const char* uri) { int ret = RT_EOK; struct webclient_session* session = RT_NULL; begin_offset = 0; file_size = 0; /* create webclient session and set header response size */ session = webclient_session_create(GET_HEADER_BUFSZ); if (!session) { LOG_E("open uri failed."); ret = -RT_ERROR; goto __exit; } webclient_set_timeout(session, 1000); /* get the real data length */ webclient_shard_head_function(session, uri, &file_size); if (file_size == 0) { LOG_E("Request file size is 0!"); ret = -RT_ERROR; goto __exit; } else if (file_size < 0) { LOG_E("webclient GET request type is chunked."); ret = -RT_ERROR; goto __exit; } LOG_I("OTA file size is (%d)", file_size); LOG_I("\033[1A"); /* register the handle function, you can handle data in the function */ webclient_register_shard_position_function(session, http_ota_shard_download_handle); /* the "memory size" that you can provide in the project and uri */ ret = webclient_shard_position_function(session, uri, begin_offset, file_size, HTTP_OTA_BUFF_LEN); /* clear the handle function */ webclient_register_shard_position_function(session, RT_NULL); if (ret == RT_EOK) { LOG_I("Download file success."); } else { LOG_E("Download file failed."); } __exit: rt_thread_delay(rt_tick_from_millisecond(5)); if (session != RT_NULL) webclient_close(session); begin_offset = 0; return ret; } ``` 以上是从 web 服务器下载文件的程序。经过多次测试,从1k大小文件开始,到 1.5M 。系统中没有其它多余线程,下载速度情况如下: > 开启 RT_DEBUG ,11k/s。关闭所有调试信息,192k/s。 #### 遇到的问题 1. 在使用新唐官方提供的 NonOS 源码测试时发现一个有意思的现象,当两个 EMAC 外设都初始化并且同时设置 LINK UP 会引起 EMAC0 只能被 ping 通,demo 里的 http 服务器访问不到了。去掉 EMAC1 的 LING_UP 标志,EMAC0 才正常工作。目前不知道原因在哪儿。 2. rt-thread 提供的驱动呢,明面上看是支持最多两个网卡设备的,但是 `eth_device_init` 初始化设备时用的是同一套 ip 地址配置,这样导致两个网卡配置成相同的 ip。这一点儿是 rt-thread 提供的 `eth_device_init` 函数处理不当,和芯片无关,换做另外一种芯片,如果它也支持双网卡也会面临相同的尴尬。 3. 解决上面这个问题,可能需要修改 `struct eth_device` 结构体定义,同时需要定义多组 `RT_LWIP_IPADDR` 了,把静态 IP 配置项挪到启用外设的位置一目了然(DHCP 可能也是和网卡紧密相关的,不是和 lwip 紧密相关的)。 附:[测试应用代码](https://gitee.com/thewon/nuc980-emac-test)
9
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
出出啊
恃人不如自恃,人之为己者不如己之自为也
文章
42
回答
1501
被采纳
338
关注TA
发私信
相关文章
1
ENV下的NUC980能移动到RT STUDIO上吗?
2
NUC980 生成 UFFS 文件系统镜像
3
怎样生成基于NUC980、rt_thread系统的板级支持包(MDK开发环境)
4
这个接口在哪个文件里面的。
5
NUC980IOT开发板rt工程创建文件
6
NUC980之EMAC功能模块的硬件介绍
7
nuc980DDR和MDK的IRAM是怎样的映射关系
8
ncu977 跑rtthread 操作io没有反应
9
NUC980开发板生成Keil工程找不到Device和编译出错
10
rtthread studio创建NUC980工程无法设置RTC日期和时间
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
五分钟玩转RT-Thread新社区
5
国产MCU移植系列教程汇总,欢迎查看!
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
LWIP
Env
AT
SPI
Bootloader
FinSH
ART-Pi
CAN总线
Hardfault
USB
文件系统
RT-Thread
DMA
SCons
线程
MQTT
RT-Thread Nano
STM32
RTC
rt-smart
ESP8266
flash
ota在线升级
WIZnet_W5500
FAL
I2C
packages_软件包
UART
cubemx
freemodbus
潘多拉开发板_Pandora
定时器
BSP
PWM
ADC
socket
中断
rt_mq_消息队列_msg_queue
keil_MDK
SDIO
Debug
AB32VG1
MicroPython
编译报错
C++_cpp
msh
ulog
QEMU
本月问答贡献
出出啊
1501
个答案
338
次被采纳
小小李sunny
1390
个答案
276
次被采纳
张世争
715
个答案
157
次被采纳
crystal266
522
个答案
153
次被采纳
whj467467222
1216
个答案
146
次被采纳
本月文章贡献
出出啊
1
篇文章
12
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
2
篇文章
2
次点赞
crystal266
2
篇文章
5
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部