- 学习路线
- RT-Thread 简介
- RT-Thread Nano
- RT-Thread Smart
- RT-Thread Studio
- 快速上手
- 内核
- Env 工具
- 设备和驱动
- 组件
- 软件包
- 物联网
- 工具
- MicroPython用户手册
- 应用开发
- RT-Thread 版本选择
- 开发环境搭建
- 固件尺寸优化
- 在RT-Thread潘多拉开发板上实现电源管理
- 网络协议栈驱动移植
- 在STM32F429上应用网络功能
- 在STM32F429上应用文件系统
- 在潘多拉上使用 SFUD 操作 Flash
- FreeModbus 应用笔记
- 应用AT组件连接ESP8266模块
- 多线程非阻塞网络编程
- 使用QEMU运行动态模块组件
- CmBacktrace应用
- 在 STM32L4 上应用 littlefs 文件系统
- STM32通用Bootloader
- wireshark抓取tls数据包
- 在 STM32 上应用 C++
- STM32 上使用 PWM
- STM32 上使用 USB Host 读写 U 盘
- QEMU 网络视频教程
- Demo 示例
- 其他
- 传感器驱动开发指南
- 软件包开发
- 向RT-Thread贡献代码
- 内核视频教程
- Env 视频教程
- rw007 SPI WiFi 模块使用
- wireshark抓取tls数据包
- Keil MDK 安装
- Rtthread dir
- 支持的传感器列表
- 支持的 Touch 列表
- Builtin functions and exceptions
- Cmath
- Gc
- Math
- Sys
- Uarray
- Ubinascii
- Ucollections
- Uerrno
- Uhashlib
- Uheapq
- Uio
- Ujson
- Uos
- Ure
- Uselect
- Usocket
- ussl – SSL/TLS 模块
- Ustruct
- Utime
- Uzlib
- thread
- micropython – 内部功能访问与控制模块
- Rtthread
- Machine
- Pin
- I2C
- SPI
- UART
- LCD
- RTC
- PWM
- ADC
- WDT
- Timer
- Network
- Wlan
- 传感器驱动框架介绍
- Preparations
SPI
machine.SPI
machine.SPI 类是 machine 模块下面的一个硬件类,用于对 SPI 的配置和控制,提供对 SPI 设备的操作方法。
SPI
是一个由主机驱动的同步串行协议。在物理层,总线有三根:SCK
、MOSI
、MISO
。多个设备可以共享同一总线,每个设备都由一个单独的信号SS
来选中,也称片选信号。- 主机通过片选信号选定一个设备进行通信。
SS
信号的管理应该由用户代码负责。(通过 machine.Pin)
构造函数
在 RT-Thread MicroPython 中 SPI
对象的构造函数如下:
class machine.SPI(id, ...)
在给定总线上构造一个 SPI
对象,id
取决于特定的移植。
如果想要使用软件 SPI
, 即使用引脚模拟 SPI
总线,那么初始化的第一个参数需要设置为 -1
,可参考 软件 SPI 示例 。
使用硬件 SPI
在初始化时只需传入 SPI
设备的编号即可,如 '50' 表示 SPI5
总线上的第 0 个设备。初始化方式可参考 硬件 SPI 示例。
如果没有额外的参数,SPI
对象会被创建,但是不会被初始化,如果给出额外的参数,那么总线将被初始化,初始化参数可以参考下面的 SPI.init
方法。
方法
SPI.init(baudrate=1000000, *, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=None, mosi=None, miso=None)
用给定的参数初始化SPI
总线:
- baudrate :
SCK
时钟频率。 - polarity :极性可以是
0
或1
,是时钟空闲时所处的电平。 - phase :相位可以是
0
或1
,分别在第一个或者第二个时钟边缘采集数据。 - bits :每次传输的数据长度,一般是 8 位。
- firstbit :传输数据从高位开始还是从低位开始,可以是
SPI.MSB
或者SPI.LSB
。 - sck :用于
sck
的machine.Pin
对象。 - mosi :用于
mosi
的machine.Pin
对象。 - miso :用于
miso
的machine.Pin
对象。
SPI.deinit()
关闭 SPI
总线。
SPI.read(nbytes, write=0x00)
读出 n 字节的同时不断的写入 write
给定的单字节。返回一个存放着读出数据的字节对象。
SPI.readinto(buf, write=0x00)
读出 n 字节到 buf
的同时不断地写入 write
给定的单字节。
这个方法返回读入的字节数。
SPI.write(buf)
写入 buf
中包含的字节。返回None
。
SPI.write_readinto(write_buf, read_buf)
在读出数据到 readbuf
时,从 writebuf
中写入数据。缓冲区可以是相同的或不同,但是两个缓冲区必须具有相同的长度。返回 None
。
常量
SPI.MASTER
用于初始化 SPI
总线为主机。
SPI.MSB
设置从高位开始传输数据。
SPI.LSB
设置从低位开始传输数据。
示例
软件模拟 SPI
>>> from machine import Pin, SPI
>>> clk = Pin(("clk", 26), Pin.OUT_PP)
>>> mosi = Pin(("mosi", 27), Pin.OUT_PP)
>>> miso = Pin(("miso", 28), Pin.IN)
>>> spi = SPI(-1, 500000, polarity = 0, phase = 0, bits = 8, firstbit = 0, sck = clk, mosi = mosi, miso = miso)
>>> print(spi)
SoftSPI(baudrate=500000, polarity=0, phase=0, sck=clk, mosi=mosi, miso=miso)
>>> spi.write("hello rt-thread!")
>>> spi.read(10)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
硬件 SPI
需要先开启 SPI
设备驱动,查找设备可以在 msh
中输入list_device
命令。
在构造函数的第一个参数传入 50
,系统就会搜索名为 spi50
的设备,找到之后使用这个设备来构建 SPI
对象:
>>> from machine import SPI
>>> spi = SPI(50)
>>> print(spi)
SPI(device port : spi50)
>>> spi.write(b'\x9f')
>>> spi.read(5)
b'\xff\xff\xff\xff\xff'
>>> buf = bytearray(1)
>>> spi.write_readinto(b"\x9f",buf)
>>> buf
bytearray(b'\xef')
>>> spi.init(100000,0,0,8,1) # Resetting SPI parameter
更多内容可参考 machine.SPI 。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论