1
在了解适用于Telink Zephyr的B91开发板和如何使用West相关的命令去编译Zephyr应用之后,让我们重温一下将固件下载到开发板上的方法和步骤,并且了解一些配件的连接和使用方式,正式开始体验Zephyr RTOS所提供的例程吧!
1固件下载
泰凌提供多种多样的烧录方式,可以将固件下载到B91开发板上。本文主要介绍在Windows平台下,采用Telink Burning EVK结合Burning and Debugging Tools (BDT)软件进行烧录的两种方式:一,Single Wire (Swire);二,USB Through Swire (DP&DM)。
Swire
Swire是使用BDT工具的默认烧入方式,请按照下面的图示将B91开发板与Telink Burning EVK进行硬件连接。
图中的紫线代表Mini接口的USB线,另外两根线代表杜邦线。其中,蓝色的为SWS - SWM接线,黑色的为GND - GND接线。完成后如下图所示。
USB Through Swire
第二个方式,是采用USB Through Swire功能,以USB接口的DP&DM当作GPIO口,去模拟上一个方法中的SWS和GND接线。那样,可以省去杜邦线,仅使用Mini-USB接线。
在Zephyr工程的telink_matter等分支中,是默认打开了这个功能,可以方便我们的烧录,更可以运用于某些未接出SWS管脚的情况下。不过,请注意,目前泰凌公司仓库中的develop分支上默认关闭了这个功能,若使用由那个分支上编译的固件,不能使用本办法。
Burning and Debugging Tools
BDT下载地址:
http://wiki.telink-semi.cn/wiki/IDE-and-Tools/Burning-and-Debugging-Tools-for-all-Series/
使用BDT 的简要步骤:
1、⽤另一条Mini-USB线将Burning EVK连接到电脑的USB⼝。
2、双击可执⾏⽂件"Telink BDT.exe"。如果硬件连接正常,可以看到BDT工具的主窗⼝。在状态栏中最左侧可以查看EVK设备的连接状态,在标题栏中也可以看到已被连接的烧录器的设备信息。
3、(可选)点击工具栏中的"Activate"按钮,可以唤醒并激活MCU(尤其是MCU处于“低功耗”模式中),停止正在进行的任务,使得芯片处于能够被Burning EVK烧录状态。
4、(可选)点击工具栏中的"SWS"按钮,可以尝试用Swire将Burning Key与将要烧录的目标MCU实现同步。
*注意:建议每次打开MCU电源时,执行一次Swire同步,以检查Burning EVK与目标板的通信是否正常。若通信状态错误,执行第3步,尝试解决问题。
5、设置Flash擦除的区域大小。
点击工具栏中的"Setting"按钮,在弹出的“Setting"窗口中可以看到默认的Flash擦除的区域大小是512KB。
*注意:对于外挂2MB Flash的B91开发板,Flash最后的8KB空间预留用于保存重要的SoC信息,因此最多可以擦除2040KB的Flash区域。
6、点击工具栏中的"Erase"按钮,等待Flash擦除操作完成。
7、选择需要烧录的固件(通常为二进制的BIN文件)。
点击"File"菜单里的"Open"子菜单,在弹出的文件选择对话框中选中需要烧录的BIN文件。选中后的BIN文件将显示在底部的状态栏中。
8、点击工具栏中的"Download"按钮,等待Flash烧录完成。
更多信息及使用方法请参考泰凌Wiki。
2示例程序
这里以之前编译过的示例介绍一下Telink Zephyr所需要用到的一些配件的连接和使用方式。
Blinky与LED灯泡
配置不同的灯光效果,可以用来指示Zephyr应用的运行状态。从之前文章的介绍中,我们知道Blinky固件将会实现一个LED灯闪烁的效果。那么,在B91开发板上烧录了之前编译的Blinky固件后,再点击BDT工具的"Reset"按钮以重新开始供电。然后,MCU将开始先加载再运行这一程序,可以观察到B91开发板上的蓝灯开始闪烁。
那么,我们是否可以操纵其他LED灯泡呢?答案是肯定的。
结合zephyr/boards/riscv/tlsr9518adk80d/tlsr9518adk80d.dts 中的配置信息,我们可以发现,只需要将 zephyr/samples/basic/blinky/src/main.c 源文件中,代表蓝色LED灯的led0替换为代表绿色LED灯的led1。然后,重新编译一下新的固件,再烧录在B91开发板上,重新上电运行,那么新的固件就将操纵绿色的LED灯泡开始闪烁。
Hello World与串口输出
在开发和维护片上系统的过程中,利用打印输出也是常用的调试手段,在Telink Zephyr工程中,也默认开启了UART协议的串口通信功能来进行打印输出。
如果烧录了之前编译的Hello_World固件,需要获取输出信息以检验输出是否正常。那么,可以采用Telink Zephyr默认GPIO管脚,去外接一个UART-to-USB串口输出模块,连接到上位机上去获取打印信息。可以按照下图的管脚配置进行连接,默认的UART0配置为:
其中,GPIO PB2是B91开发板上的输出管脚,与转换模块上的RXD接口相连;类似的,GPIO PB3是输入管脚,应该与TXD接口相连;也别忘了接地,否则可能导致无法输出,或输出异常。
将串口输出模块接入PC,使用串口读取工具,配置波特率为 115200,8N1,则可以读取 B91开发板的打印信息。从上面截图中,可以看到Hello_world例程默认地输出了Zephyr系统的Banner,并用printk方法打印出了字符串和当前开发板的名字。
当然,Zephyr也提供了Logging子系统供我们使用,下面将简要介绍一下在模块中配置这个子系统的方法。拿Hello_world这个例程举例,在prj.confg中使能CONFIG_LOG这个宏以开启Logging子系统,然后在源代码中,包含logging的头文件,注册hello_world例程为一个模块。使用以下方法可以输出指定的打印信息:
(1) LOG_ERR: 等级为1
(2) LOG_WRN: 等级为2
(3) LOG_INF: 等级为3
(4) LOG_DBG: 等级为4
注意这里的LOG_MODULE_REGISTER方法中的第二个参数指定了可以输出的打印信息的等级,选择了LOG_LEVEL_WRN,即意味着可以输出LOG_ERR和LOG_WRN以上的信息。
从接收到的串口打印输出来看,也对应了我们在源代码中的配置。
当然,这里只是一个简单的用法。更多信息和用法,可以阅读Zephyr社群的文档并参考Logging示例。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !