Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
nuc980
NUC980 测评 之 EMAC
发布于 2022-03-11 19:37:25 浏览:1854
订阅该版
[tocm] ### 测评环境 开发板:NK-980IOT V1.0 开发环境:keil 5.25 + env 1.2.0.7 + NuWriter v1.18 rt-thread:4.0.5 release 测评任务:EMAC ### 开箱 开箱图片 ![nuc980](https://thewon.gitee.io/images/nuc980/nuc980.jpg) NUC980 有两个 EMAC 外设,NK-980IOT V1.0 只使用了 EMAC0。 支持 RMII 接口,收发都有 DMA 和 各自 256 字节的 FIFO。 ### 搭建环境 #### 下载安装 RT-Thread Studio 安装 Stutio 并运行,用个账号登录,无账号先注册。 后面的所有操作都不影响,为什么每次打开软件都要提示这个信息?这个提示的意思是 studio 不能完整正常工作还是能正常工作?我需要必须安装个 git 吗? ![image.png](https://oss-club.rt-thread.org/uploads/20220314/030672bcc1cef9cde5e457bdfebd22bd.png) 创建项目我们选择基于开发板,如果没有安装 NK-980IOT 开发板包,选择安装更多。 ![image.png](https://oss-club.rt-thread.org/uploads/20220314/c847299d9406e7b8975c17f073f169cf.png) 选择 rt-thread 版本,删掉不需要的版本。 ![image.png](https://oss-club.rt-thread.org/uploads/20220314/9e80b26a12171b134fe42800fb4cee06.png) 选择 NK-980IOT 开发板包,点击【安装资源包】。 ![image.png](https://oss-club.rt-thread.org/uploads/20220314/fb9bc9ed5f7e603b37fa49b64e0af395.png) 最后,再次创建项目。 ![image.png](https://oss-club.rt-thread.org/uploads/20220314/6598225d9ebaeda4bbd7590f9f9cb32f.png) 完成。 ### 项目配置 打开 settings 之后,把所有选项过一遍,取消掉不需要的配置,先精简配置。我只留下和 EMAC GPIO UART 相关的配置,所有其它默认开启的 SPI ADC RTC WDT... 全去掉了。 ![image.png](https://oss-club.rt-thread.org/uploads/20220421/79cdb620d8b9f540f3f9224225371441.png.webp) 先跑个最小系统,检查一下系统能不能正常运行,finsh 能不能工作。 ### 启用 EMAC 外设 #### 选用 EMAC0 ![image.png](https://oss-club.rt-thread.org/uploads/20220314/78c1f7217424a31275bfd11468ae6a32.png) 同时启用 phy 芯片支持。 ![image.png](https://oss-club.rt-thread.org/uploads/20220314/582f2c040dfb8b798543f32862bf4229.png) #### 添加 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)
10
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
出出啊
恃人不如自恃,人之为己者不如己之自为也
文章
43
回答
1517
被采纳
342
关注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
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
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
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部