Arduino Nano 33 BLE Sense 在 TockOS 中点灯

2020 年底,突然对 TinyML 产生兴趣,按书中推荐,买了块 Nano 33 (Nano 33 BLE Sense)。

最近加入了 Rust 中文社群,看到张老师发的公众号文章《2021 年 Rust 生态调研报告| 星辰大海 【上篇】》中提到嵌入式系统 TockOS,正好手里有板子,不如在 TockOS 中 用 Rust 来点个灯吧!说干就干。

首先,准备开发环境。我目前的开发环境在 MacOS 下,需要 Python3 、Rust 和 Tockloader。Tockloader 工具可以将内核和应用程序烧录到板子上,并且还具有对 Tock 板有用的功能,例如易于管理的串行连接,以及通过 JTAG 或 USB (如果安装了引导加载程序)。它是一个 Python 程序,可以使用 Python 包管理工具(pip)进行安装:

(Linux): pip3 install --upgrade tockloader --user
(MacOS): pip3 install --upgrade tockloader

复制代码

由于我使用 USB 将电脑与板子进行连接,因此需要安装引导加载程序(Bootloader)。Nano 33 预装的是用在 Arduino 各种板上的 BOSSA Bootloader。不幸的是,这个引导加载程序不太适合 Tock 开发。对于 Tock 开发,我们需要将引导加载程序替换为 Tock Bootloader。 Tock Bootloader 在读写板时提供了更大的灵活性,并且也在 Tock 本身之上实现。现在将介绍如何安装 Tock Bootloader,我们的目标是把 Tock Bootloader 覆盖 BOSSA Bootloader。

  • 第一步我们将需要 bossac 工具。使用开发板随附的现有引导加载程序需要此工具。可以从源代码编译此工具:

    git clone https://github.com/arduino/BOSSA
    cd BOSSA
    make bossac
    
    复制代码

    然后需要将 BOSSA/bin 添加到你的 $PATH 变量中,这样你的系统才能找到 bossac 程序。

  • 接下来,将板子使用 USB 与电脑连接,然后我们将使用 BOSSA Bootloader 来加载 Tock Bootloader 的副本。 BOSSA Bootloader 期望所有应用程序代码(即不是引导加载程序)从地址 0x10000 开始。也就是说,当引导加载程序完成时,它开始在地址 0x10000 处执行。

  • 因此,我们将加载 Tock 引导加载程序的副本到地址 0x10000。这也意味着我们需要一个经过编译的引导加载程序版本,以便在地址 0x10000 处运行。 要加载第一个 Tock Bootloader,请确保 Nano 33 处于引导加载程序模式,方法是 双击板子上的重置按钮(指示灯应闪烁),然后执行以下命令:

    bossac -e -w bootloaders/tock-bootloader.nano33ble.v1.1.0.0x10000.bin
    
    复制代码
    tockloader
    flash -address 0x10000 /Users/zhanghe/code/tock/target/thumbv7em-none-eabi/release/nano33ble.bin
    
    复制代码

    上面的 .bin 文件是我本地编译好的。可以克隆 https://github.com/tock/tock.git 仓库,在里面的 /boards/nano33ble 下有编译好的引导程序。

  • 我们可以使用 tockloader 测试上一步是否成功。一个简单的测试是运行:

    tockloader info
    
    复制代码

    如果可以看到类似于下面这种信息,就表明 tockloader 可以与引导加载程序进行通信。

    [INFO   ] No device name specified. Using default name "tock".
    [INFO   ] Using "/dev/cu.usbmodem144101 - Nano 33 BLE - TockOS".
    tockloader version: 1.8.0
    [STATUS ] Showing all properties of the board...
    [INFO   ] Waiting for the bootloader to start
    Apps:
    [INFO   ] No found apps.
    Attributes:
    00:    board = nano33ble
    01:     arch = cortex-m4
    02:  appaddr = 0x50000
    03:
    04:
    05:
    06:
    07:
    08:
    09:
    10:
    11:
    12:
    13:
    14:
    15:
    
    Bootloader version: 1.1.0
    [INFO   ] Finished in 1.893 seconds
    
    复制代码

    到这里,安装引导加载程序基本完成了。

接下来,就可以通过 tockloader 安装应用程序了:

tockloader install blink

复制代码

选择安装在线仓库 TAB 的应用,至此,点灯成功。下一篇,我们将使用 libtock-rs 库自己写一个点灯程序。

猜你喜欢

转载自juejin.im/post/7061908323515236382