功能模块的硬件介绍
收到开发板时,惊喜地发现居然还附带了一块LCD屏幕!
开发板的做工相当精致,通过PCB板右侧中间部分的镂空间隔设计,提醒用户这块开发板可能大致分为两部分组成。根据厂家的资料介绍,这两部分分别是采用 NuMicro® M2354KJFAE 微控制器的主控板,与 Nu-Link2-Me 调试编程器。
板载的Wi-Fi模块是大家常见的ESP8266模块,Ai-Thinker安信可出品的esp8266串口wifi模块,型号是ESP-12F,为了避免干扰,发挥模块收发天线的最佳效果,Wi-Fi模块的板载天线部分在开发板左侧突出了大约5-6毫米,略显美中不足。
从厂家的资料可见,开发板上还预留了Wi-Fi模块固件的升级接口。
开发板出厂时已经将Nu-Link2-Me VCOM指拨开关的1及2切换至ON,启动虚拟串口(VCOM)功能这个操作完成了。根据厂家的快速指南,在电脑上安装好Nuvoton Nu-Link Driver驱动后就能通过串口连接上开发板。
功能模块的使用说明
开发板出厂默认自带的Demo固件比较简单,通过Nu-Link2-Me 调试编程器的ICE USB接口给开发板上电时,附带的LCD屏幕是没有任何显示的,从串口输出信息上看,只是简单的反馈板载wifi模块的硬件自检通过信息和Simple Blinky Demo的信息。
下载rt-thread源代码创建工程的过程就有点小波折。
本想在M2354板BSP包目录下用pkgs —dist创建项目框架后复制到其他目录下再创建第一个demo工程的,由于是第一次操作,对env的使用也不熟,没能按设想的完成,又急着体验一下开发板,就在BSP包目录下用menuconfig —generate、pkgs —list、pkgs —update、scons —target=mdk5创建了mdk5工程。
用Keil uVision5打开生成的mdk5工程,首次编译时提示有个“use of undeclared identifier ‘EINVAL’ ”的错误,打开相关的hw_symmetric.c源码,根据上下文的大致信息,
将return -EINVAL;
更正为return -RT_EINVAL;
就OK了。
简单编辑一下工程属性后就可以使用Nuvoton Nu-Link Debugger驱动把编译好的固件下载烧录到开发板上查看demo的效果了。
和估计是裸机的Simple Blinky Demo相比,从rt-thread源代码BSP包通过env工具menuconfig 生成的demo例程相对就丰富很多了。LCD屏幕也亮了,从上面显示的时钟信息能否在通电约30秒左右完成NTP自动校时操作,就能让人及时确认板载wifi是否顺利连通网络。
按tab键后,finsh控制台能输出一长串可执行的RT-Thread shell commands,由此可见新唐厂家技术人员对rt-thread的适配工作应该是已经做的很完善了!
其中的”at_wifi_set”命令就是能让你自行更改需要接入的wifi网络SSID和密码信息的,非常方便。
只要在finsh命令界面运行这样的命令:
at_wifi_set
即可即时更改开发板的wifi连接参数。
但这样更改wifi连接参数无法保存在wifi模块的固件里,每次断电重启后就恢复默认设置了。
不过刚开始时我自己倒也不是这样调整输入wifi密码的,而是通过串口输出wifi连接失败的错误提示信息中”NT_ZY_BUFFALO”的字眼在工程中找到board_dev.c源码来修改wifi参数的。
这个源码应该是厂家适配开发板的板载Wi-Fi模块,方便用户无需重新编译工程就能通过finsh控制台在线灵活更改wifi参数设计的。
/************************************************************************//
*
[url=home.php?mod=space&uid=855824]@copyright[/url] (C) 2019 Nuvoton Technology Corp. All rights reserved.
SPDX-License-Identifier: Apache-2.0
Change Logs:
Date Author Notes
2020-1-16 Wayne First version
*****************************************************************************/
#include <rtdevice.h>
#include <drv_gpio.h>
#if defined(BOARD_USING_ESP8266)
#include <at_device_esp8266.h>
#define LOG_TAG "at.sample.esp"
#undef DBG_TAG
#include <at_log.h>
static struct at_device_esp8266 esp0 =
{
"esp0", / esp8266 device name /
"uart4", / esp8266 serial device name, EX: uart1, uuart1 /
// "NT_ZY_BUFFALO", / Wi-Fi SSID /
// "12345678", / Wi-Fi PASSWORD /
"like-3_Wi-Fi5", / Wi-Fi SSID /
"LIKE85333051", / Wi-Fi PASSWORD /
1024 / Receive buffer length */
};
static int rt_hw_esp8266_port(void)
{
struct at_device_esp8266 esp8266 = &esp0;
rt_base_t esp_rst_pin = NU_GET_PININDEX(NU_PC, 13);
rt_base_t esp_fwupdate_pin = NU_GET_PININDEX(NU_PD, 12);
/ ESP8266 reset pin PC.13 /
rt_pin_mode(esp_rst_pin, PIN_MODE_OUTPUT);
rt_pin_write(esp_rst_pin, 1);
/ ESP8266 reset pin PD.12 */
rt_pin_mode(esp_fwupdate_pin, PIN_MODE_OUTPUT);
rt_pin_write(esp_fwupdate_pin, 1);
return at_device_register(&(esp8266->device),
esp8266->device_name,
esp8266->client_name,
AT_DEVICE_CLASS_ESP8266,
(void *) esp8266);
}
INIT_APP_EXPORT(rt_hw_esp8266_port);
static void at_wifi_set(int argc, char **argv)
{
struct at_device_ssid_pwd sATDConf;
struct at_device at_dev = RT_NULL;
/ If the number of arguments less than 2 /
if (argc != 3)
{
rt_kprintf("\n");
rt_kprintf("at_wifi_set \n");
return ;
}
sATDConf.ssid = argv[1]; //ssid
sATDConf.password = argv[2]; //password
if ((at_dev = at_device_get_first_initialized()) != RT_NULL)
at_device_control(at_dev, AT_DEVICE_CTRL_SET_WIFI_INFO, &sATDConf);
else
{
rt_kprintf("Can't find any initialized AT device.\n");
}
}
#ifdef FINSH_USING_MSH
MSH_CMD_EXPORT(at_wifi_set, AT device wifi set ssid / password function);
#endif
#endif / BOARD_USING_ESP8266 */
通过AT指令可知开发板板载Wi-Fi模块ESP-12F的运行波特率为115200.
新唐厂家做的demo中已经将NTP自动网络授时功能适配完善了,因为NTP server参数中的”time.stdtime.gov.tw”授时服务器访问不畅,wifi联网后都会有相关的错误提示,
[E/at.clnt] execute command (AT+CIPDOMAIN=”time.stdtime.gov.tw”) failed!
通过menuconfig配置更换为国内的cn.ntp.org.cn服务器之后就不会有类似的失败提示信息了。
一般开发板上电约30秒左右,板载wifi模块就能完成联网并通过NTP工具实现网络自动授时。
外设性能指标测试
本来打算借助RT-Thread的网络工具集 (NetUtils)组件里的Iperf工具测试wifi模块联网的性能和带宽、NetIO工具测试网络的吞吐量、轻量级文件传输工具TFTP测试文件传输的。结果几个工具都无法运行服务器模式,
msh />tftp -s
msh />[E/at.clnt] execute command (AT+CIPCLOSE=0) failed!
tftp server bind failed!! exit
msh />iperf -s -p 5001
msh />[E/at.clnt] execute command (AT+CIPCLOSE=0) failed!
[E/iperf] Unable to bind!
msh />iperf —stop
msh />
网上搜索一番才了解到,因为wifi模块是借助at_device组件联网的,而at_device组件还不支持服务器模式,所以只能放弃,暂时先进行可在客户端模式下运行的iperf工具做个简单的网络性能和带宽测试。
Iperf 使用的是主从式架构,即一端是服务器,另一端是客户端,开发板上的iperf做客户端时,需要借助JPerf测试软件来运行为服务器。
JPerf 测试软件的windows安装文件可在开发板BSP包目录下的\numaker-m2354\packages\netutils-latest\tools文件夹中找到,这个是绿色软件,无需安装,解压到新文件夹即可使用。
不过因为JPerf需要JAVA的运行环境,所以还得先下载安装好JAVA运行环境才能运行。
设置运行在服务器模式并启动后,就可以在finsh控制台运行iperf客户端来进行网络性能测试。
iperf -c 192.168.10.12 -p 5001
iperf —stop
要停止测试时,需要先在finsh shell界面停止iperf,再到JPerf测试软件界面停止服务器。
[380] 178.0-179.0 sec 10.0 KBytes 81.9 Kbits/sec
[380] 179.0-180.0 sec 10.0 KBytes 81.9 Kbits/sec
[ ID] Interval Transfer Bandwidth
[380] 0.0-180.4 sec 1856 KBytes 84.3 Kbits/sec
Done.
wifi模块的网络吞吐量比较低,本来我以为和连接wifi模块的串口波特率有关,但和安信科售后联系过,得知串口波特率对模块的网络吞吐性能是没有影响的。
心得体会
小结:
1、厂家对开发板在RT-Thread系统上的适配程度比较高;
2、从iperf的测试结果看,板载wifi模块的传输速度平均只有84.3 Kbits/sec!这个结果超出我的预期,不知那里出了问题。还得再研究查找原因。
原作者:zhd0305