简介
到手了一块W600芯片的星通智联TB01,与ESP8266相似,自带wifi,但却芯片内置1M 的存储,并且可以使用RT-Thread系统,于是上手耍起来。
刚拿到板子,发现真的非常小巧,呈星型排布的蓝色LED非常有特色。板子上只有个MicroUSB,上电与刷写固件均使用这个口,可以说是非常简洁了。两边共放置了24个排针插孔,赠送插针没有焊,整体看着非常舒爽。
下载官方的SDK(从QQ群中获取,github上也有),展开后,非常简洁
➜ rt tree RT-Thread_W60X_SDK -L 1
RT-Thread_W60X_SDK
├── README.pdf
├── docs
├── drivers
├── examples
├── libraries
├── rt-thread
└── tools
6 directories, 1 file
相关的文档也非常齐全,看着内心无比愉悦,赶紧上手搞起来!
环境
我使用的环境是MacOS+GCC
点灯
上手一块板子,点灯可以说是第一课了。这里官方提供的examples可以说是非常完整了:
➜ rt tree RT-Thread_W60X_SDK/examples -L 1
RT-Thread_W60X_SDK/examples
├── 01_basic_led_blink
├── 02_basic_key
├── 03_basic_rgb_led
├── 04_basic_beep
├── 05_basic_ir
├── 06_driver_lcd
├── 07_driver_temp_humi
├── 08_driver_als_ps
├── 09_component_fs_tf_card
├── 10_component_fal
├── 11_component_kv
├── 12_component_fs_flash
├── 13_component_ulog
├── 14_component_adbd
├── 15_component_micropython
├── 16_iot_wifi_manager
├── 17_iot_web_config_wifi
├── 18_iot_airkiss
├── 20_iot_at_server
├── 21_iot_mqtt
├── 22_iot_http_client
├── 23_iot_web_server
├── 24_iot_websocket
├── 25_iot_cjson
├── 26_iot_mbedtls
├── 27_iot_hw_crypto
├── 28_iot_ota_ymodem
├── 29_iot_ota_http
├── 30_iot_netutils
├── 31_iot_cloud_rtt
├── 32_iot_cloud_onenet
├── 33_iot_cloud_ali_iotkit
├── 34_iot_cloud_ms_azure
├── 35_iot_cloud_tencent
└── 36_iot_board_demo
35 directories, 0 files
我们首先使用第一个 01_basic_led_blink
进行学习和上手。
➜ rt tree RT-Thread_W60X_SDK/examples/01_basic_led_blink -L 1
RT-Thread_W60X_SDK/examples/01_basic_led_blink
├── Bin
├── Kconfig
├── README.md
├── ROM.ini
├── SConscript
├── SConstruct
├── applications
├── build
├── cconfig.h
├── makeimg.bat
├── makeimg.py
├── project.ewp
├── project.eww
├── project.uvoptx
├── project.uvprojx
├── rtconfig.h
├── rtconfig.py
├── rtconfig.pyc
├── rtthread-w60x.map
├── rtthread.bin
├── rtthread.elf
├── template.ewp
├── template.uvoptx
└── template.uvprojx
3 directories, 21 files
这里默认有Keil的工程文件,是针对使用Windows+keil的开发者使用的。而我是Mac用户,习惯使用GCC,这里就忽略那些工程文件了。
修改源码
直接打开 examples/01_basic_led_blink/applications
就可以看到main.c
,根据相关文档,我们这里只把led灯的引脚改为TB01的一个LED即可,不过我这里做了一点点小修改:
#include <rtthread.h>
#include <rtdevice.h>
#include "board.h"
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
/* 配置 LED 灯引脚 */
#define LED_PIN PIN_LED_R
int pins[5] = {19, 20, 21, 22, 23};
int main(void)
{
unsigned int count = 1;
unsigned int i = 0;
for (i = 0; i < 5; i++) {
/* 设置 LED 引脚为输出模式 */
rt_pin_mode(pins[i], PIN_MODE_OUTPUT);
}
while (count > 0)
{
for (i = 0; i < 5; i++) {
/* LED 灯亮 */
rt_pin_write(pins[i], PIN_LOW);
LOG_D("led on, count: %d;pins[%d]", count, pins[i]);
rt_thread_mdelay(500);
}
for (i = 0; i < 5; i++) {
/* LED 灯灭 */
rt_pin_write(pins[i], PIN_HIGH);
LOG_D("led off");
rt_thread_mdelay(500);
}
count++;
}
return 0;
}
不过根据文档,还需要修改examples/01_basic_led_blink/rtconfig.h
/* W60x Device config */
#define SOC_W600_A8xx
// #define SOC_W601_A8xx
编译
scons
编译环境这个地方,需要修改配置文件:examples/01_basic_led_blink/rtconfig.py
EXEC_PATH = '/Users/lee/rt/gcc-arm-none-eabi-6-2017-q1-update/bin'
这里我采用的是gcc-arm-none-eabi-6-2017-q1-update
版本,因为最新版本编译时,会有问题。(这里先占位,后续再写篇文章详细描述。)
固件生成
适配苹果MacOS系统环境
SDK默认支持Windows 和 Linux 两种系统,但是MacOS虽然与Linux同源,但仍有些区别,恰好,
tools/ota_packager/rt_ota_packaging_tool_cli
libraries/WM_Libraries/Tools/makeimg
libraries/WM_Libraries/Tools/makeimg_all
tools/update_fls
这几个重要文件都没有办法在MacOS上使用:
➜ RT-Thread_W60X_SDK file libraries/WM_Libraries/Tools/makeimg
libraries/WM_Libraries/Tools/makeimg: ELF 64-bit LSB pie executable x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=77563dbbf392d9903c683a52939eeaf7f152d10f, not stripped
在群里寻求帮助,但可惜没有比较合适的办法,只好自己编译这几个文件了。其实这几个文件,除了rt_ota_packaging_tool_cli
之外,都在SDK中带了源码,编译就好了。
➜ RT-Thread_W60X_SDK gcc libraries/WM_Libraries/Tools/makeimgsource/makeimg.c -o libraries/WM_Libraries/Tools/makeimg
➜ RT-Thread_W60X_SDK gcc libraries/WM_Libraries/Tools/makeimgsource/makeimg_all.c -o libraries/WM_Libraries/Tools/makeimg_all
就这么简单,makeimg
和makeimg_all
就编译成功了。运行一下:
➜ RT-Thread_W60X_SDK ./libraries/WM_Libraries/Tools/makeimg
param cnt error
参数0: exe
参数1: 输入bin文件 ,原始文件或者压缩档文件
参数2 : 输出文件
参数3: 输入IMAGE类型,0:user image,1:reserved,2:secboot
参数4: 输入压缩类型标志,0:非压缩,1:压缩
参数5: 版本号文件
参数6: 输入image存放位置
参数7: 输入image运行位置
参数8: 输入原始image文件
➜ RT-Thread_W60X_SDK ./libraries/WM_Libraries/Tools/makeimg_all
param cnt error
参数0: exe
参数1: 输入secboot.img文件
参数2: 输入image文件
参数3 : 输出文件
➜ RT-Thread_W60X_SDK
非常顺利。
接下来就是 update_fls
➜ RT-Thread_W60X_SDK gcc tools/make_fal/crc32.c tools/make_fal/make_fal.c -Itools/make_fal/ -o tools/update_fls
➜ RT-Thread_W60X_SDK file tools/update_fls
tools/update_fls: Mach-O 64-bit executable x86_64
➜ RT-Thread_W60X_SDK tools/update_fls
param cnt error!
param 0: .
param 1: input FLS file
param 2: input FAL file
param 3: output FLS file
➜ RT-Thread_W60X_SDK
同样顺利。
编译生成固件
剩下就是标准步骤了:
➜ RT-Thread_W60X_SDK cd examples/01_basic_led_blink
➜ 01_basic_led_blink python makeimg.py
makeimg rtthread.rbl ...
/bin/sh: /Users/lee/rt/RT-Thread_W60X_SDK/tools/ota_packager/rt_ota_packaging_tool_cli: cannot execute binary file
makeimg 1M Flash...
makeimg 2M Flash...
end
➜ 01_basic_led_blink ls -t Bin
rtthread_layout_16M.FLS rtthread_layout_1M.FLS version.txt
这样,我们的固件就生成了。
刷写固件
但是,另一个问题来了,怎么下载到板子上呢?官方提供的刷写都是在Windows下,使用自家开发的串口工具进行下载的,虽然非常方便,但是对于我这个工作环境不适用啊?
参考文档
本来这个问题让我挺头大的,但是,其实解决起来确实非常简单。
在官方提供的文档中libraries/WM_Libraries/Doc/WM_W60X_固件升级指导_V1.2.pdf
中,明确指出,可以使用secureCRT
工具进行刷写固件。
恰巧,我的MacOS系统也安装了这个secureCRT
工具。
刷写方法
文档中已经写的非常详细了,我这边简单写一下就是:TB01开发板,只需要按住key键,再按一下Reset键,松开两个按键,即可进入刷机模式,然后拖拽固件rtthread_layout_1M.FLS
到窗口中,使用Xmodem
选项下载,等待下载完成,再次按下Reset即可。就是这么简单。
总结
至此,终于可以愉快的在星通智联TB01 W600芯片 上使用RT-Thread了。
纵观整个过程,我也有过很多迷茫,中间求助群友,被冷嘲热讽了一下,但是经过不懈的学习,查阅资料,终于解决了自己的问题,内心还是很有成就感的。
至于我使用什么样的环境,也许并不跟我的信仰、道德、人品挂钩。并且,丰富开发环境,让开发者能够更简单的使用,降低上手门槛,让更多不同平台的开发者都可以参与其中,这不跟星通智联TB01的设计理念相通吗?
这也提醒着我,今后如果碰到别的群友遇到了他们解决不了的问题,不要站在道德或知识的至高点去打击他们,而是鼓励、帮助他们解决问题,这才能成为一个 更好的自己 。