MicroPython在RP2040上的指令集和使用
1、对应于thonny的MicroPython支持,是REPL模式,也就是大家非常熟悉的会话模式。在固件中,缺省设置是通过USB口交互。也可以自定义用UART交互,使用的UART参数为115200-9-1-N,引脚为0,1,4,5
具体编译的方法也很简单,就是要把源代码目录下的ports/rp2/mpconfigport.h文件,其中 MICROPY_HW_ENABLE_UART_REPL 的数值从0改为1。编译成功后如上帖,进入boot模式复制到新增的驱动器后就自动更新了。
2、RP2040的microPython功能
RP2040使用的是标准库,可以从标准官网上找到,https://docs.micropython.org/en/latest/library/machine.html ,可用的标准库如下
对应于基于machine 的主要是以下类,这些是基于microPython的通用类
◦ machine.Pin class.
◦ machine.Timer class.
◦ machine.ADC class.
◦ machine.I2C and machine.SoftI2C classes.
◦ machine.SPI and machine.SoftSPI classes.
◦ machine.WDT class.
◦ machine.PWM class.
◦ machine.UART class
对应于RP2040的转有的是PIO库
◦ PIO hardware access library ,PIO硬件访问
◦ PIO program assembler,PIO程序汇编,
◦ Raw flash read/write access,PIO直接访问Flash内存
因为RP2040是双核的,在MicroPython还可以通过thread来进行双核开发。所以,基于RP2040的micro Python编程还是比较强大的。
以下面简单的点灯代码为例,是如下实现的。
from machine import Pin
led = Pin(25, Pin.OUT)
led.value(1)
led.value(0)
把LED.value()的赋值放在loop循环中就可以实现最基础的电灯,使用machine.PWM(),就可以实现呼吸灯。
3、RP2040的外部设备访问
RP2040的外部设备,如LCD,运动传感器等,都是通过SPI和I2C的访问实现的。在上一帖中,对于LCD的写入和控制,就是用SPI地址的读写实现的,按照LCD的控制流程,进行LCD寄存器额SPI写入。对于6轴姿态传感器是用I2C的访问实现的。
在其他RP2040定制版本,如连接WIFI,BLE等无线连接的,其实是通过UART等模块,用AT指令进行读写,实现了无线连接,若RP2040-W,就是这样一款wifi无线RP2040.
4、从microPython的代码分析,其实是用最少的指令集实现对嵌入式MCU的控制。这个是RP2040的一个开放的开发策略,这些功能和代码,感觉和arduino似曾相识,如用DigitalWrite(),adc.Read()等,逻辑上非常相似。都是在底层的内核上再wrap了一层通用的解释型代码,实现开发的快速上手。而且整个开发环境简单明了,不需要很复杂的工具,就能安装驱动,构建开发环境。
基本逻辑是出厂配置一个可以用USB直接连接访问的bootloader,在boot模式的时候作为一个外置U-disk,提供拖拽的方式写入分别适用于microPython和C++的驱动,随后在编程的代码在这个驱动之上实现第二层的代码执行。
前面已经描述了如何安装microPython驱动支持,然后用thonny快速编程的过程。后面,还要用arduino演示如何用arduino的驱动实现对于arduino的支持。arduino的开发,也是对于c++的支持和应用。