i.MXRT 系列快速参考¶
Teensy 4.1 板。
以下是基于 i.MXRT 的板的快速参考。如果这是您第一次使用此板,了解微控制器的概述可能会很有用:
安装 MicroPython¶
请参阅教程的相应部分:在 i.MXRT 上开始使用 MicroPython。它还包括故障排除小节。
通用板控¶
MicroPython REPL 位于 USB 端口上,配置为 VCP 模式。制表符补全对于找出对象具有哪些方法很有用。粘贴模式 (ctrl-E) 对于将大量 Python 代码粘贴到 REPL 中很有用。
machine
模块:
import machine
machine.freq() # get the current frequency of the CPU
延迟和计时¶
使用 time
模块:
import time
time.sleep(1) # sleep for 1 second
time.sleep_ms(500) # sleep for 500 milliseconds
time.sleep_us(10) # sleep for 10 microseconds
start = time.ticks_ms() # get millisecond counter
delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
计时器¶
i.MXRT 端口具有三个硬件定时器。使用具有从 0 到 2(含)的计时器 ID的 machine.Timer类:
from machine import Timer
tim0 = Timer(0)
tim0.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(0))
tim1 = Timer(1)
tim1.init(period=2000, mode=Timer.PERIODIC, callback=lambda t:print(1))
machine.Timer类:
此端口当前不支持虚拟计时器。
引脚和 GPIO¶
使用 machine.Pin类:
from machine import Pin
p0 = Pin('D0', Pin.OUT) # create output pin on GPIO0
p0.on() # set pin to "on" (high) level
p0.off() # set pin to "off" (low) level
p0.value(1) # set pin to on/high
p2 = Pin('D2', Pin.IN) # create input pin on GPIO2
print(p2.value()) # get value, 0 or 1
p4 = Pin('D4', Pin.IN, Pin.PULL_UP) # enable internal pull-up resistor
p5 = Pin('D5', Pin.OUT, value=1) # set pin high on creation
p6 = Pin(pin.cpu.GPIO_B1_15, Pin.OUT) # Use the cpu pin name.
可用引脚遵循相应电路板的范围和标签,例如:
0-33 代表青少年 4.0,
MIMXRT10xx-EVK 板的 0-21,或“D0-Dxx”或“A0-Ann”,
0-14 用于 Olimex RT1010Py 板,或 'D0'-'Dxx' 和 'A0'-'Ann'
Seeed ARCH MIX 板的“J3_xx”、“J4_xx”、“J5_xx”,
或 Pin.board 或 Pin.cpu 类的引脚名称。
笔记:
MIMXRT1xxx-EVK 板可能有其他板载设备连接到这些引脚,从而限制其用于输入或输出。
在 MIMXRT1010_EVK 上,Arduino 连接器的引脚 D4、D5 和 D9 默认情况下未连接到 MCU。有关详细信息,请参阅原理图。
- 在 MIMXRT1170_EVK 板上,Arduino 连接器的内排分配如下:
D16 - D23:J9,奇数针脚;D17 默认未连接。
D24 - D27:J26,奇数针脚;必须关闭 J63-J66 才能启用这些引脚。
D29 - D36:J25,奇数针脚;D29 和 D30 默认未连接。
有一个更高级别的抽象machine.Signal可用于反转引脚。 on()
对于使用或照亮低电平有效 LED 很有用 value(1)
。
UART(串行总线)¶
请参阅machine.UART。
from machine import UART
uart1 = UART(1, baudrate=115200)
uart1.write('hello') # write 5 bytes
uart1.read(5) # read up to 5 bytes
i.MXRT 有多达 8 个硬件 UART,但并非每个板都为用户公开所有 TX 和 RX 引脚。UART 的引脚分配是固定的。UART 编号为 1..8。rx/tx 引脚根据下表分配:
Board / Pin |
UART0 |
UART1 |
UART2 |
UART3 |
---|---|---|---|---|
青少年 4.0 |
0/1 |
7/8 |
14/15 |
|
青少年 4.1 |
0/1 |
7/8 |
14/15 |
|
MIMXRT1010-EVK |
调试 USB |
D0/D1 |
D7/D6 |
|
MIMXRT1015-EVK |
调试 USB |
D0/D1 |
D7/A1 |
|
MIMXRT1020-EVK |
调试 USB |
D0/D1 |
D9/D6 |
D10/D13 |
MIMXRT1050-EVK |
调试 USB |
D0/D1 |
D7/D6 |
D8/D9 |
MIMXRT1050-EVKB |
调试 USB |
D0/D1 |
D7/D6 |
D8/D9 |
MIMXRT1060-EVK |
调试 USB |
D0/D1 |
D7/D6 |
D8/D9 |
MIMXRT1064-EVK |
调试 USB |
D0/D1 |
D7/D6 |
D8/D9 |
MIMXRT1170-EVK |
调试 USB |
D0/D1 |
D12/D11 |
D10/D13 |
Olimex RT1010Py |
RxD/TxD |
D5/D6 |
||
Seeed ARCH MIX |
J3_19/J3_20 |
J4_16/J4_17 |
J4_06/J4_07 |
Board / Pin |
UART4 |
UART5 |
UART6 |
UART7 |
UART8 |
---|---|---|---|---|---|
青少年 4.0 |
16/17 |
21/20 |
25/24 |
28/29 |
|
青少年 4.1 |
16/17 |
21/20 |
25/24 |
28/29 |
34/35 |
MIMXRT1010-EVK |
|||||
MIMXRT1015-EVK |
|||||
MIMXRT1020-EVK |
D15/D14 |
A1/A0 |
|||
MIMXRT1050-EVK |
A1/A0 |
||||
MIMXRT1050-EVKB |
A1/A0 |
||||
MIMXRT1060-EVK |
A1/A0 |
||||
MIMXRT1064-EVK |
A1/A0 |
||||
MIMXRT1170-EVK |
D15/D14 |
D25/D26 |
D33/D34 |
D35/D36 |
|
Olimex RT1010Py |
|||||
Seeed ARCH MIX |
J4_10/J4_11 |
J5_08/J5_12 |
PWM(脉宽调制)¶
i.MXRT 具有多达四个专用 PWM 模块,每个模块具有四个 FLEXPWM 子模块,以及多达四个具有四个通道的 QTMR 模块,可用于生成 PWM 信号或信号对。
TPWM 函数由machine.PWM类提供。它支持为该类列出的所有基本方法和一些用于处理信号组的附加方法。
# Samples for Teensy
#
from machine import Pin, PWM
pwm2 = PWM(Pin(2)) # create PWM object from a pin
pwm2.freq() # get current frequency
pwm2.freq(1000) # set frequency
pwm2.duty_u16() # get current duty cycle, range 0-65535
pwm2.duty_u16(200) # set duty cycle, range 0-65535
pwm2.deinit() # turn off PWM on the pin
# create a complementary signal pair on Pin 2 and 3
pwm2 = PWM((2, 3), freq=2000, duty_ns=20000)
# Create a group of four synchronized signals.
# Start with Pin(4) at submodule 0, which creates the sync pulse.
pwm4 = PWM(Pin(4), freq=1000, align=PWM.HEAD)
# Pins 5, 6, and 9 are pins at the same module
pwm5 = PWM(Pin(5), freq=1000, duty_u16=10000, align=PWM.HEAD, sync=True)
pwm6 = PWM(Pin(6), freq=1000, duty_u16=20000, align=PWM.HEAD, sync=True)
pwm9 = PWM(Pin(9), freq=1000, duty_u16=30000, align=PWM.HEAD, sync=True)
pwm3 # show the PWM objects properties
PWM 构造函数 ¶
- class PWM(dest, freq, duty_u16, duty_ns, *, center, align, invert, sync, xor, deadtime)
使用以下参数构造并返回一个新的 PWM 对象:
dest是输出 PWM 的实体,通常是 machine.Pin对象,但端口可能允许其他值,如整数或字符串,它们指定 machine.PIN 类中的 Pin。 dest是单个对象或两个元素的对象元组。如果指定了对象元组,则两个引脚以互补模式运行。这两个管脚必须是同一个子模块的 A/B 通道。
PWM 对象由 FLEXPWM 模块或 QTMR 模块提供。i.MXRT 器件具有两个或四个 FLEXPWM 和 QTMR 模块。每个 FLEXPWM 模块有四个子模块,每个子模块有三个通道,分别称为 A、B 和 X。每个 QTMR 模块有四个通道。每个 FLEXPWM 子模块或 QTMR 通道可以设置为不同的参数。并非每个通道都路由到电路板引脚。详情如下。
设置freq会影响同一个 FLEXPWM 子模块的三个通道。一次只能指定duty_u16和duty_ns之一。
关键字参数:
freq应该是一个整数,它设置 PWM 周期的频率(Hz)。有效频率范围分别为 15 Hz。分别为 18Hz 24Hz 高达 > 1 MHz。
duty_u16将占空比设置为 ratio 。只有在不使用相应子模块的 A 和 B 通道时,才能更改 X 通道的占空比。否则 X 通道的 duty_16 值为 32768 (50%)。
duty_u16 / 65536
中心=价值。整数设置脉冲周期内的脉冲中心。范围是 0-65535。产生的脉冲将从中心 - duty_u16/2 持续到 center + duty_u16/2。
对齐=值。脉冲中心设置的快捷方式,使脉冲位于帧的中心(值=0)、开始时的前沿(值=1)或脉冲周期结束时的后沿(值=2) .
反转=True|False 通道掩码。在掩码中设置一个位会反转相应的通道。位 0 反转第一个指定通道,位 2 反转第二个。默认值为 0。
同步=真|假。如果模块的子模块 0 的一个通道已经处于活动状态,则可以强制同一模块的其他子模块与子模块 0 同步。它们的脉冲周期从同一时钟周期开始。默认值为假。
异或=0|1|2。如果设置为 1 或 2,则通道将从通道 A 或 B 输出异或信号。如果在通道 A 或 B 上设置为 1,则 A 和 B 将显示相同的信号。如果设置为 2,A 和 B 将显示交替信号。有关详细信息和说明,请参阅 MCU 参考手册的“双开关 PWM”一章。
死时间=time_ns。此设置影响互补通道并定义第一个通道的边沿和下一个通道的边沿之间的死区时间,其中两个通道都设置为低电平。这允许连接的 H 桥在打开另一侧之前关闭推挽驱动器的一侧。
脉宽调制方法¶
这些方法与通用 machine.PWM 类相同,但 init() 方法具有附加的关键字参数,与构造函数的参数相匹配。
每个 FLEX 子模块或 QTMR 模块可能以不同的频率运行。PWM 信号是通过将 pwm_clk 信号除以一个积分因子创建的,根据公式:
f = pwm_clk / (2**n * m)
其中 n 在 0..7 的范围内,m 在 2..65536 的范围内。pmw_clk 对于 MIMXRT1010/1015/1020 是 125Mhz,对于 MIMXRT1050/1060/1064 是 150 MHz,对于 MIMXRT1170 是 160MHz。最低频率是 pwm_clk/2**23 (15, 18, 20Hz)。U16 分辨率的最高频率是 pwm_clk/2**16(1907、2288、2441 Hz),分辨率为 1% 的最高频率是 pwm_clk/100(1.25、1.5、1.6 MHz)。A/B 通道可达到的最高频率为 pwm_clk/3,X 通道和 QTMR 信号为 pwm_clk/2。
PWM 引脚分配¶
引脚的指定方式与 Pin 类相同。下表显示了板引脚到 PWM 模块的分配:
Pin/ MIMXRT |
1010 |
1015 |
1020 |
1050/1060/1064 |
1170 |
---|---|---|---|---|---|
D0 |
Q1/1 |
F1/1/B |
|||
D1 |
Q1/0 |
F1/1/A |
|||
D2 |
F1/3/B |
F1/3/A |
F1/3/B |
||
D3 |
F1/3/A |
F1/0/A |
F2/3/B |
F4/0/A |
F1/2/A |
D4 |
F1/3/A (*) |
Q1/2 |
Q2/1 |
F2/3/A |
Q4/2 |
D5 |
F1/0/B (*) |
F1/0/B |
F2/3/A |
F1/3/A |
F1/2/B |
D6 |
F1/2/B |
F2/0/A |
Q3/2 |
F1/0/A |
|
D7 |
F1/0/A |
Q3/3 |
|||
D8 |
F1/0/A |
F1/1/B |
F1/0/B |
F1/1/X |
Q4/3 |
D9 |
F1/1/B (*) |
F1/2/A |
F2/0/B |
F1/0/X |
F1/0/B |
D10 |
F1/3/B |
F2/2/B |
F1/0/B (*) |
F2/2/B |
|
D11 |
F1/2/A |
F2/1/A |
F1/1/A (*) |
||
D12 |
F1/2/B |
F2/1/B |
F1/1/B (*) |
||
D13 |
F1/3/A |
F2/2/A |
F1/0/A (*) |
F2/2/A |
|
D14 |
F1/0/B |
F2/3/B |
|||
D15 |
F1/0/A |
F2/3/A |
|||
A0 |
F1/2/A |
||||
A1 |
F1/3/X |
F1/3/B |
F1/2/B |
||
A2 |
F1/2/X |
F1/3/A |
F1/3/A |
||
A3 |
F1/2/A |
F1/3/B |
|||
A4 |
Q3/1 |
||||
A5 |
Q3/0 |
||||
D31 |
F1/2/B |
||||
D32 |
F1/2/A |
||||
D33 |
F1/1/B |
||||
D34 |
F1/1/A |
||||
D35 |
F1/0/B |
||||
D36 |
F1/0/A |
默认情况下,标有 (*) 的引脚未在板上接线。
Pin |
青少年 4.0 |
Pin |
青少年 4.1 |
---|---|---|---|
0 |
F1/1/X |
0 |
F1/1/X |
1 |
F1/0/X |
1 |
F1/0/X |
2 |
F4/2/A |
2 |
F4/2/A |
3 |
F4/2/B |
3 |
F4/2/B |
4 |
F2/0/A |
4 |
F2/0/A |
5 |
F2/1/A |
5 |
F2/1/A |
6 |
F2/2/A |
6 |
F2/2/A |
7 |
F1/3/B |
7 |
F1/3/B |
8 |
F1/3/A |
8 |
F1/3/A |
9 |
F2/2/B |
9 |
F2/2/B |
10 |
Q1/0 |
10 |
Q1/0 |
11 |
Q1/2 |
11 |
Q1/2 |
12 |
Q1/1 |
12 |
Q1/1 |
13 |
Q2/0 |
13 |
Q2/0 |
14 |
Q3/2 |
14 |
Q3/2 |
15 |
Q3/3 |
15 |
Q3/3 |
18 |
Q3/1 |
18 |
Q3/1 |
19 |
Q3/0 |
19 |
Q3/0 |
22 |
F4/0/A |
22 |
F4/0/A |
23 |
F4/1/A |
23 |
F4/1/A |
24 |
F1/2/X |
24 |
F1/2/X |
25 |
F1/3/X |
25 |
F1/3/X |
28 |
F3/1/B |
28 |
F3/1/B |
29 |
F3/1/A |
29 |
F3/1/A |
33 |
F2/0/B |
33 |
F2/0/B |
36 |
F2/3/A |
||
37 |
F2/3/B |
||
DAT1 |
F1/1/B |
42 |
F1/1/B |
DAT0 |
F1/1/A |
43 |
F1/1/A |
CLK |
F1/0/B |
44 |
F1/0/B |
CMD |
F1/0/A |
45 |
F1/0/A |
DAT2 |
F1/2/A |
46 |
F1/2/A |
DAT3 |
F1/2/B |
47 |
F1/2/B |
48 |
F1/0/B |
||
49 |
F1/2/A |
||
50 |
F1/2/B |
||
51 |
F3/3/B |
||
52 |
F1/1/B |
||
53 |
F1/1/A |
||
54 |
F3/0/A |
Pin |
Seeed ARCH MIX |
---|---|
J3_04 |
Q4/3 |
J3_10 |
Q1/3 |
J3_12 |
Q2/3 |
J3_13 |
Q3/3 |
J3_16 |
Q3/0 |
J3_17 |
Q3/1 |
J3_19 |
F1/3/X |
J3_20 |
F1/2/X |
J4_08 |
F4/0/A |
J4_09 |
F4/1/A |
J4_16 |
Q3/2 |
J4_17 |
Q3/3 |
J5_32 |
Q1/0 |
J5_28 |
Q1/1 |
J5_29 |
Q1/2 |
J5_30 |
Q2/0 |
J5_04 |
Q2/1 |
J5_05 |
Q2/3 |
J5_06 |
F2/0/A |
J5_07 |
F2/0/B |
J5_08 |
F2/1/A |
J5_12 |
F2/1/B |
J5_13 |
F2/2/A |
J5_14 |
F2/2/B |
J5_23 |
F1/3/A |
J5_24 |
F1/3/B |
J5_25 |
F2/3/A |
J5_26 |
F2/3/B |
J5_42 |
Q3/0 |
J5_43 |
Q3/1 |
J5_50 |
F1/0/X |
LED_RED |
F2/3/A |
LED_GREEN |
F1/3/A |
LED_BLUE |
F1/3/B |
Pin |
Olimex RT1010PY |
---|---|
D0 |
|
D1 |
F1/0/B |
D2 |
F1/0/A |
D3 |
F1/1/B |
D4 |
F1/1/A |
D5 |
F1/2/B |
D6 |
F1/2/A |
D7 |
F1/3/B |
D8 |
F1/3/A |
D9 |
|
D10 |
F1/0/B |
D11 |
F1/0/A |
D12 |
F1/1/B |
D13 |
F1/1/A |
D14 |
|
A0 |
|
A1 |
F1/2/B |
A2 |
F1/2/A |
A3 |
F1/3/B |
A4 |
F1/3/A |
SDI |
F1/3/X |
SDO |
F1/2/X |
CS0 |
F1/1/X |
SCK |
F1/0/X |
传奇:
Qm/n:QTMR 模块 m,通道 n
Fm/n/l:FLEXPWM 模块 m,子模块 n,通道 l。X 通道的脉冲始终与周期开始对齐。
没有 PWM 信号的引脚未列出。一个信号可能在多个引脚上可用。FlexPWM 管脚也可能是纯 CPU 管脚,不分配给板信号。在这种情况下,PWM 输出被禁用。子模块 0 的 PWM 通道仍可用作同一模块的其他通道的同步源,除非被其他外设使用。
i.MX RT1011 的子模块 0 引脚:
Pin |
Channel |
---|---|
Pin.cpu.GPIO_01 |
B |
Pin.cpu.GPIO_02 |
A |
Pin.cpu.GPIO_AD_12 |
X |
Pin.cpu.GPIO_SD_01 |
B |
Pin.cpu.GPIO_SD_02 |
A |
i.MX RT1021 的子模块 0 引脚:
Pin |
Module & Channel |
---|---|
Pin.cpu.GPIO_AD_B1_06 |
FLEXPWM1 Channel A |
Pin.cpu.GPIO_AD_B1_07 |
FLEXPWM1 Channel B |
Pin.cpu.GPIO_EMC_26 |
FLEXPWM1 Channel A |
Pin.cpu.GPIO_EMC_27 |
FLEXPWM1 Channel B |
Pin.cpu.GPIO_AD_B0_14 |
FLEXPWM2 Channel A |
Pin.cpu.GPIO_AD_B0_15 |
FLEXPWM2 Channel B |
Pin.cpu.GPIO_EMC_10 |
FLEXPWM2 Channel X |
Pin.cpu.GPIO_EMC_38 |
FLEXPWM2 Channel A |
Pin.cpu.GPIO_EMC_39 |
FLEXPWM2 Channel B |
i.MX RT1052、i.MX RT1062 和 i.MX RT1064 的子模块 0 引脚:
Pin |
Module & Channel |
---|---|
Pin.cpu.GPIO_AD_B0_02 |
FLEXPWM1 Channel X |
Pin.cpu.GPIO_EMC_23 |
FLEXPWM1 Channel A |
Pin.cpu.GPIO_EMC_24 |
FLEXPWM1 Channel B |
Pin.cpu.GPIO_SD_B0_00 |
FLEXPWM1 Channel A |
Pin.cpu.GPIO_SD_B0_01 |
FLEXPWM1 Channel B |
Pin.cpu.GPIO_B0_06 |
FLEXPWM2 Channel A |
Pin.cpu.GPIO_B0_07 |
FLEXPWM2 Channel B |
Pin.cpu.GPIO_EMC_06 |
FLEXPWM2 Channel A |
Pin.cpu.GPIO_EMC_07 |
FLEXPWM2 Channel B |
Pin.cpu.GPIO_EMC_29 |
FLEXPWM3 Channel A |
Pin.cpu.GPIO_EMC_30 |
FLEXPWM3 Channel B |
Pin.cpu.GPIO_AD_B1_08 |
FLEXPWM4 Channel A |
Pin.cpu.GPIO_EMC_00 |
FLEXPWM4 Channel A |
Pin.cpu.GPIO_EMC_01 |
FLEXPWM4 Channel B |
i.MX RT1176 的子模块 0 引脚
Pin |
Module & Channel |
---|---|
Pin.cpu.GPIO_EMC_B1_00 |
FLEXPWM4 Channel A (*) |
Pin.cpu.GPIO_EMC_B1_01 |
FLEXPWM4 Channel B (*) |
Pin.cpu.GPIO_EMC_B1_06 |
FLEXPWM2 Channel A (*) |
Pin.cpu.GPIO_EMC_B1_07 |
FLEXPWM2 Channel B (*) |
Pin.cpu.GPIO_EMC_B1_23 |
FLEXPWM1 Channel A (*) |
Pin.cpu.GPIO_EMC_B1_24 |
FLEXPWM1 Channel B (*) |
Pin.cpu.GPIO_EMC_B1_29 |
FLEXPWM3 Channel A (*) |
Pin.cpu.GPIO_EMC_B1_30 |
FLEXPWM3 Channel B (*) |
Pin.cpu.GPIO_AD_00 |
FLEXPWM1 Channel A |
Pin.cpu.GPIO_AD_01 |
FLEXPWM1 Channel B |
Pin.cpu.GPIO_AD_24 |
FLEXPWM2 Channel A |
Pin.cpu.GPIO_AD_25 |
FLEXPWM2 Channel B |
(*) 用于 SDRAM 的引脚
ADC(模数转换)¶
i.MXRT ADC 功能在标有“Ann”的引脚上可用。
使用 machine.ADC类:
from machine import ADC
adc = ADC(Pin(32)) # create ADC object on ADC pin
adc.read_u16() # read value, 0-65536 across voltage range 0.0v - 3.3v
ADC 的分辨率为 12 位,精度为 10 到 11 位,与 read_u16() 返回的值无关。如果您需要更高的分辨率或更好的精度,请使用外部 ADC。
软件 SPI 总线¶
软件 SPI(使用 bit-banging)适用于所有引脚,并通过 machine.SoftSPI 类访问。
from machine import Pin, SoftSPI
# construct a SoftSPI bus on the given pins
# polarity is the idle state of SCK
# phase=0 means sample on the first edge of SCK, phase=1 means the second
spi = SoftSPI(baudrate=100000, polarity=1, phase=0, sck=Pin(0), mosi=Pin(2), miso=Pin(4))
spi.init(baudrate=200000) # set the baudrate
spi.read(10) # read 10 bytes on MISO
spi.read(10, 0xff) # read 10 bytes while outputting 0xff on MOSI
buf = bytearray(50) # create a buffer
spi.readinto(buf) # read into the given buffer (reads 50 bytes in this case)
spi.readinto(buf, 0xff) # read into the given buffer and output 0xff on MOSI
spi.write(b'12345') # write 5 bytes on MOSI
buf = bytearray(4) # create a buffer
spi.write_readinto(b'1234', buf) # write to MOSI and read from MISO into the buffer
spi.write_readinto(buf, buf) # write buf to MOSI and read MISO back into buf
支持的最高波特率为 500000。
硬件 SPI 总线¶
最多有四个硬件 SPI 通道可实现更快的传输速率(高达 90Mhz)。SPI 信号对 GPIO 引脚具有固定分配。这取决于电路板设计,哪些 SPI 的信号会暴露给用户,如下表所示。表中的信号顺序为:CS0、CS1、MOSI、MISO、CLK。
Board / Pin |
SPI0 |
SPI1 |
SPI2 |
---|---|---|---|
Teensy 4.0 |
10/-/11/12/13 |
0/-/26/1/27 |
|
Teensy 4.1 |
10/37/11/12/13 |
0/-/26/1/27 |
-/29/50/54/49 |
MIXMXRT1010-EVK |
D10/D7/D11/D12/D13 |
||
MIXMXRT1015-EVK |
D10/-/D11/D12/D13 |
||
MIXMXRT1020-EVK |
D10/-/D11/D12/D13 |
A3/D0/A5/A4/A0 |
|
MIXMXRT1050-EVK |
D10/-/D11/D12/D13 (*) |
||
MIXMXRT1050-EVKB |
D10/-/D11/D12/D13 (*) |
||
MIXMXRT1060-EVK |
D10/-/D11/D12/D13 (*) |
||
MIXMXRT1064-EVK |
D10/-/D11/D12/D13 (*) |
||
MIXMXRT1170-EVK |
D10/-/D11/D12/D13 |
D28/-/D25/D24/D26 |
-/-/D14/D15/D24 |
Olimex RT1010Py |
CS0/-/SDO/SDI/SCK |
SDCARD with CS1 |
|
Seeed ARCH MIX |
J4_12/-/J4_14/J4_13/J4_15 |
J3_09/J3_05/J3_08_J3_11 |
默认情况下,标有 (*) 的引脚未在板上接线。
硬件 SPI 通过machine.SPI 类访问,与上面的软件 SPI 有相同的方法:
from machine import SPI
spi = SPI(0, 10000000)
spi.write('Hello World')
笔记:
即使目前支持的最高波特率是 90 Mhz,设置波特率并不总是会产生完全一致的频率,尤其是在高波特率下。
以 90 MHz 发送是可能的,但在测试中接收只能达到 60 MHz。
软件 I2C 总线¶
软件 I2C(使用 bit-banging)适用于所有支持输出的引脚,并通过 machine.SoftI2C 类访问:
from machine import Pin, SoftI2C
i2c = SoftI2C(scl=Pin(5), sda=Pin(4), freq=100000)
i2c.scan() # scan for devices
i2c.readfrom(0x3a, 4) # read 4 bytes from device with address 0x3a
i2c.writeto(0x3a, '12') # write '12' to device with address 0x3a
buf = bytearray(10) # create a buffer with 10 bytes
i2c.writeto(0x3a, buf) # write the given buffer to the slave
支持的最高频率为 400000。
硬件 I2C 总线¶
最多有四个硬件 I2C 通道,可实现更快的传输速率并支持完整的 I2C 协议。I2C 信号对 GPIO 引脚具有固定分配。这取决于电路板设计,哪些 I2C 的信号会暴露给用户,如下表所示。表中的信号顺序为:SDA、SCL。
Board / Pin |
I2C 0 |
I2C 1 |
I2C 2 |
I2C 3 |
I2C 4 |
---|---|---|---|---|---|
Teensy 4.0 |
18/19 |
17/16 |
25/24 |
||
Teensy 4.1 |
18/19 |
17/16 |
25/24 |
||
MIXMXRT1010-EVK |
D14/D15 |
D0/D1 |
|||
MIXMXRT1015-EVK |
D14/D15 |
||||
MIXMXRT1020-EVK |
D14/D15 |
A4/A5 |
D0/D1 |
||
MIXMXRT1050-EVK |
A4/A5 |
D1/D0 |
|||
MIXMXRT1050-EVKB |
A4/A5 |
D1/D0 |
|||
MIXMXRT1060-EVK |
A4/A5 |
D1/D0 |
|||
MIXMXRT1064-EVK |
A4/A5 |
D1/D0 |
|||
MIXMXRT1170-EVK |
D14/D15 |
D1/D0 |
A4/A5 |
D26/D25 |
D19/D18 |
Olimex RT1010Py |
SDA1/SCL1 |
SDA2/SCL2 |
|||
Seeed ARCH MIX |
J3_17/J3_16 |
J4_06/J4_07 |
J5_05/J5_04 |
硬件 I2C 通过 machine.I2C 类访问,与上面的软件 SPI 具有相同的方法:
from machine import I2C
i2c = I2C(0, 400_000)
i2c.writeto(0x76, b"Hello World")
I2S总线¶
请参阅 machine.I2S。使用带有简单外部编解码器(如 UDA1334)的 Teensy 4.1 板的示例:
from machine import I2S, Pin
i2s = I2S(2, sck=Pin(26), ws=Pin(27), sd=Pin(7),
mode=I2S.TX, bts=16,format=I2S.STEREO,
rate=44100,ibuf=40000)
i2s.write(buf) # write buffer of audio samples to I2S device
将 I2S 与 MIMXRT10xx_DEV 板一起使用的示例:
from machine import I2S, I2C, Pin
import wm8960
i2c=I2C(0)
wm=wm8960.WM8960(i2c, sample_rate=SAMPLE_RATE_IN_HZ,
adc_sync=wm8960.sync_dac,
swap=wm8960.swap_input)
i2s = I2S(1, sck=Pin("SCK_TX"), ws=Pin("WS_TX"), sd=Pin("SD_RX"),
mck=Pin("MCK),mode=I2S.RX, bts=16,format=I2S.MONO,
rate=32000,ibuf=10000)
i2s.readinto(buf) # fill buffer with audio samples from I2S device
在此示例中,输入通道在 WM8960 驱动程序中交换,因为板载麦克风连接到右通道,但单声道音频取自左通道。请注意,sck 和 ws 引脚连接到 I2S 总线的 TX 信号。这是有意的,因为在 MW8960 编解码器中,这些信号是为 RX 和 TX 共享的。
使用 Teensy 音频屏蔽的示例:
from machine import I2C, I2S, Pin
from sgtl5000 import CODEC
i2s = I2S(1, sck=Pin(21), ws=Pin(20), sd=Pin(7), mck=Pin(23),
mode=I2S.TX, bits=16,rate=44100,format=I2S.STEREO,
ibuf=40000,
)
# configure the SGTL5000 codec
i2c = I2C(0, freq=400000)
codec = CODEC(0x0A, i2c)
codec.mute_dac(False)
codec.dac_volume(0.9, 0.9)
codec.headphone_select(0)
codec.mute_headphone(False)
codec.volume(0.7, 0.7)
i2s.write(buf) # write buffer of audio samples to I2S device
Teensy Audio shield 使用的 SGTL5000 编解码器将 RX 信号用于 RX 和 TX。请注意,编解码器在 I2S 设备之后初始化。这是必不可少的,因为它的 I2C 操作需要 MCK,并且由 I2S 控制器提供。
MIMXRT 板在板连接器上可能有 1 或 2 条 I2S 总线可用。在 MIMXRT1010 设备上,总线编号为 1 和 3。
一些 MIMXRT 板的引脚分配:
Board |
ID |
MCK |
SCK_TX |
WS_TX |
SD_TX |
SCK_RX |
WS_RX |
SD_RX |
---|---|---|---|---|---|---|---|---|
Teensy 4.0 |
1 |
23 |
26 |
27 |
7 |
21 |
20 |
8 |
Teensy 4.0 |
2 |
33 |
4 |
3 |
2 |
5 |
||
Teensy 4.1 |
1 |
23 |
26 |
27 |
7 |
21 |
20 |
8 |
Teensy 4.1 |
2 |
33 |
4 |
3 |
2 |
5 |
||
Seeed Arch MIX |
1 |
J4_09 |
J4_14 |
J4_15 |
J14_13 |
J4_11 |
J4_10 |
J4_10 |
Olimex RT1010Py |
1 |
D8 |
D6 |
D7 |
D4 |
D1 |
D2 |
D3 |
Olimex RT1010Py |
3 |
D10 |
D9 |
D11 |
||||
MIMXRT_DEV |
1 |
“MCK” |
“SCK_TX” |
“WS_TX” |
“SD_TX” |
“SCK_RX” |
“WS_RX” |
“SD_RX” |
为 MIMXRT_10xx_DEV 板提供了符号引脚名称。这些也是为其他板提供的。
实时时钟 (RTC)¶
见 machine.RTC:
from machine import RTC
rtc = RTC()
rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
rtc.datetime() # get date and time
rtc.now() # return date and time in CPython format.
i.MXRT MCU 支持 RTC 的电池备份。通过连接 1.5-3.6V 的电池,可以在没有主电源的情况下保持时间和日期。从电池汲取的电流约为 20µA,相当高。CR2032 纽扣电池可以使用大约一年。
SD卡¶
import machine, os
sd = machine.SDCard()
fs = os.VfsFat(sd)
os.mount(fs, "/sd") # mount
os.listdir('/sd') # list directory contents
os.umount('/sd') # eject
注意:基于 i.mx-rt 1011 和 1015 的板不支持machine.SDCard
该类。对于这些, sdcard.py
可以使用来自 MicroPython 驱动程序的基于 SPI 的驱动程序。使用时,必须过驱 SPI 硬件模块的 CS 引脚。例子:
import os, sdcard, machine
cs_pin = "D10"
spi = machine.SPI(0) # SPI0 with cs at Pin "D10" used for SDCARD
cs = machine.Pin(cs_pin, machine.Pin.OUT, value=1)
sd = sdcard.SDCard(spi, cs)
vfs = os.VfsFat(sd)
os.mount(vfs, "/sdcard")
OneWire 驱动程序¶
OneWire 驱动程序在软件中实现,适用于所有引脚:
from machine import Pin
import onewire
ow = onewire.OneWire(Pin(12)) # create a OneWire bus on GPIO12
ow.scan() # return a list of devices on the bus
ow.reset() # reset the bus
ow.readbyte() # read a byte
ow.writebyte(0x12) # write a byte on the bus
ow.write('123') # write bytes on the bus
ow.select_rom(b'12345678') # select a specific device by its ROM code
DS18S20 和 DS18B20 设备有一个特定的驱动程序:
import time, ds18x20
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
ds.convert_temp()
time.sleep_ms(750)
for rom in roms:
print(ds.read_temp(rom))
一定要在数据线上放一个4.7k的上拉电阻。请注意,convert_temp()
每次要对温度进行采样时都必须调用该方法。
DHT 驱动程序¶
DHT 驱动程序在软件中实现并适用于所有引脚:
import dht
import machine
d = dht.DHT11(machine.Pin(4))
d.measure()
d.temperature() # eg. 23 (°C)
d.humidity() # eg. 41 (% RH)
d = dht.DHT22(machine.Pin(4))
d.measure()
d.temperature() # eg. 23.6 (°C)
d.humidity() # eg. 41.3 (% RH)
确保数据线上有一个 4.7k 的上拉电阻。一些 DHT 模块可能已经有一个。
以太网驱动程序¶
除基于 MIMXRT1011 的板和 Teensy 4.0 外,所有 MIMXRT 板都支持以太网。示例用法:
import network
lan = network.LAN(0)
lan.active(True)
如果 LAN 中有 DHCP 服务器,则 IP 地址由该服务器提供。否则,可以使用 lan.ifconfig() 设置 IP 地址。默认地址为 192.168.0.1。
Teensy 4.1 板上没有以太网插孔,但 PJRC 提供了一个用于自组装的适配器。Seeed ARCH MIX 板在板上没有 PHY 硬件,但是您可以连接外部 PHY 接口。默认情况下,Seeed Arch Mix 的固件使用 LAN8720 PHY 的驱动程序。MIMXRT1170_EVK 配备了两个以太网端口,100M 端口的地址为 LAN(0),1G 端口的地址为 LAN(1)。
有关网络接口的详细信息,请参阅类network.LAN.
传输文件¶
例如,可以使用该 mpremote
工具或使用 SD 卡将文件传输到 i.MXRT 设备。如果以太网可用,您也可以使用 ftp。请参阅 MicroPython 论坛,了解 FTP 服务器或其他社区支持的将文件传输到 i.MXRT 板的替代方案,例如 rshell 或 Thonny。