闪存

闪存是将我们的程序移动到微控制器(永久)存储器中的过程。一旦刷写完成,每次上电时,单片机都会执行刷写的程序。

在这种情况下,我们的led-roulette程序将是微控制器内存中唯一的程序。 意思是微控制器上没有其他 任何东西在运行:没有操作系统,没有"守护进程",什么都没有。led-roulette完全控制设备。

由于cargo embed,闪存二进制文件本身非常简单。

不过,在执行该命令之前,让我们看看它实际上做了什么。如果您看一下micro:bit的侧面,USB连接器朝 上,您会注意到那里实际上有2个黑色方块 (在micro:bit v2上,有第三个也是最大的一个,它是一个扬声器),一个 是我们已经谈过的MCU,但另一个是干什么用的?另一个芯片有3个主要用途:

  1. 从USB连接器向我们的MCU供电
  2. 为我们的MCU提供一个串口转USB桥接器(我们将在后面的章节中研究)
  3. 作为程序/调试器(这是目前的相关目的)

基本上,该芯片充当我们的计算机(通过 USB 连接到它)和MCU(通过迹线连接到它并使用 SWD 协议与 之通信之间的桥梁。 这个桥使我们能够将新的二进制文件闪存到MCU上,通过调试器和其他东西检查它的状态。

所以让我们闪存吧!

# For micro:bit v2
$ cargo embed --features v2 --target thumbv7em-none-eabihf
  (...)
     Erasing sectors ✔ [00:00:00] [####################################################################################################################################################]  2.00KiB/ 2.00KiB @  4.21KiB/s (eta 0s )
 Programming pages   ✔ [00:00:00] [####################################################################################################################################################]  2.00KiB/ 2.00KiB @  2.71KiB/s (eta 0s )
    Finished flashing in 0.608s

# For micro:bit v1
$ cargo embed --features v1 --target thumbv6m-none-eabi
  (...)
     Erasing sectors ✔ [00:00:00] [####################################################################################################################################################]  2.00KiB/ 2.00KiB @  4.14KiB/s (eta 0s )
 Programming pages   ✔ [00:00:00] [####################################################################################################################################################]  2.00KiB/ 2.00KiB @  2.69KiB/s (eta 0s )
    Finished flashing in 0.614s

您会注意到cargo-embed在输出最后一行后会出现块,这是有意的,您不应该关闭它,因为我们需要在此 状态下进行下一步:调试它!此外, 您会注意到cargo buildcargo embed实际上传递了相同的标志, 这是因为cargo embed实际执行构建,然后将生成的二进制文件闪存到芯片上,因此如果您以后想要闪存,可以 在将来省去cargo build步骤。