i.MXRT 系列快速参考

Teensy 4.1 board

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')

笔记:

  1. 即使目前支持的最高波特率是 90 Mhz,设置波特率并不总是会产生完全一致的频率,尤其是在高波特率下。

  2. 以 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卡

machine.SDCard:

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。