micropython-SPI通讯
micropython-SPI通讯
- 1.什么是SPI?
- 2.SPI通讯原理
- 3.Micropython中的SPI
- 4.ZTMR测试SPI
- 1. ZTMR中SPI引脚
- 2. ZTMRSPI自测
- 2. SPI,2板之间通讯测试
1.什么是SPI?
SPI 是英语 Serial Peripheral Interface 的缩写,顾名思义就是串行外围设备接口。
SPI 是一种高速的、全双工、同步通信总线,标准的 SPI 也仅仅使用 4 个引脚,常用于单片机和 EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信。
论从硬件还是软件上看,SPI和I2C都很类似,只是它在物理层上需要三根数据线:SCK,MOSI,MISO。因为将 数据的收发信号分开,所以SPI的速度比I2C更快,适合高速通信(普通 I2C设备的速率是100KB/s,高速设备的速率是 400KB/s,少数设备支持 1MB/s;而 SPI 设备的速率一般至少是2MB/s,有些设备的速率可以达 到数十MB/s)。
2.SPI通讯原理
SPI通讯主要是主从方式通信,这种模式通常只有一个主机和一个或者多个从机,标准的 SPI 是 4 根线,分别是 SSEL(片选,也写作 SCS)、SCLK(时钟,也写作 SCK)、MOSI(主机输出从机输入Master Output/Slave Input)和 MISO(主机输入从机输出 Master Input/Slave Output)。
SSEL:从设备片选使能信号。如果从设备是低电平使能的话,当拉低这个引脚后,从设备就会被选中,主机和这个被选中的从机进行通信。
SCLK:时钟信号,由主机产生,和 I2C通信的 SCL 有点类似。
MOSI:主机给从机发送指令或者数据的通道。
MISO:主机读取从机的状态或者数据的通道。
在某些情况下,我们也可以用 3 根线的 SPI 或者 2 根线的 SPI 进行通信:
- 主机只给从机发送命令,从机不需要回复数据的时候,那么 MISO 就可以不要;
- 而在主机只读取从机的数据,不需要给从机发送指令的时候,那MOSI 就可以不要;
- 当一个主机一个从机的时候,从机的片选有时可以固定为有效电平而一直处于使能状态,那么 SSEL 就可以不要;
- 此时如果再加上主机只给从机发送数据,那么 SSEL 和 MISO 都可以不要;如果主机只读取从机送来的数据,SSEL 和 MOSI 都可以不要。
3.Micropython中的SPI
基本用法
有些微控制器的 SPI 接口支持标准连接方式和半双工连接方式 (MISO 和MOSI信号合二为一),在MicroPython中,目前只支持标准方式。
在MicroPython中,SPI的用法和I2C类似它的主要函数有以下几个。
SPI.init(mode,baudrate=1000000,polarity=0,phase=0,bits=8,
firstbit=SPI.MSB,pins= (CLK,MOSI,MISO))
初始化SPI总线:
◆mode,SPI.MASTER,主机模式;SPI.SLAVE,从机模式。
◆baudrate,SCK时钟频率。
◆polarity,可以是0或1,代表空闲时时钟电平。
◆phase,可以是0或1,代表采样数据时在第一或第二时钟沿。
◆bits,是数据位,只能是8,16或32,默认8。 ◆firstbit,目前只能是SPI.MSB,代表传输时高位在前。
◆pins,代表SPI总线使用的GPIO元组。
在STM32控制器中,支持由硬件直接驱动SPI的CS信号,提高运行效率。但是在MicroPython中,不支持这种模式,需要在软件中由用户控制CS信号。这样虽然降低了一点性能,但是可以让 SPI 接口具有更好 的通用性,可以用总线方式连接多个芯片,再由不同的CS信号选择需 要工作的芯片。
使用SPI时要特别注意相位,它由polarity和phase两个参数决定,如 果设置错误将无法正常通信。polarity和phase组合起来有4种可能,也就是SPI的4种工作模式,一般常用模式0和模式3。
deinit()
关闭SPI。
write(buf)
写入数据,写入数据的数量是buf的长度。
read(nbytes,write=0x00)
读取数据到nbytes中,同时写入设定的数据(默认0),返回参数是 读取数据的数量。
readinto(buf,write=0x00)
和read()函数作用相似,只是读取的数据存放到缓冲区中,同时 写入预定数据,返回读取数据的数量
write_readinto(write_buf,read_buf)
将write_buf的数据写入SPI中,同时从总线上读取数据到read_buf。 两个缓冲区的长度需要相同,返回实际写入数据的数量。
4.ZTMR测试SPI
1. ZTMR中SPI引脚
SPI1,一般STM32都有3组SPI。我们使用SPI1 来做测试,其他SPI2,SP3使用方法相同。
2. ZTMRSPI自测
自连接测试
from pyb import SPI
buf = bytearray(10)
spi = SPI(1, SPI.MASTER, baudrate=9600000, polarity=1, phase=0, crc=0x07)
data = spi.send_recv(b'0123456789')
spi.send_recv(b'0123456789', buf)
print(repr(buf))
输出结果:未短接MOSI(A7)和MISO(A6)引脚时
from pyb import SPI
buf = bytearray(10)
spi = SPI(1, SPI.MASTER, baudrate=9600000, polarity=1, phase=0, crc=0x07)
data = spi.send_recv(b'0123456789')
spi.send_recv(b'0123456789', buf)
输出结果:短接MOSI和MISO引脚时
2. SPI,2板之间通讯测试
测试说明:
主机CS引脚内部上拉到VCC(3.3),从机CS引脚下拉到GND
timeout 是以毫秒计的等待接收的超时时长。
注意:SPI时钟线未必是符合要求的波特率。硬件仅支持APB总线频率除以预分频器的波特率(见pyb.freq()), 可为2、4、8、16、32、64、128和256。
pyb.freq()
(168000000, 168000000, 42000000, 84000000)
接角
A5 CLK
A6 MISO
A7 MOSI
GND
A4没接
ZTMR作为主机
from pyb import SPI
from machine import Pinspi = SPI(1,SPI.MASTER,baudrate=4000000,polarity=0,phase=0)
cs=Pin('A4')
cs.init(cs.OUT, value=1)cs(0)
spi.send('hello') #发送数据
cs(1)spi.recv(5) #读取5个字节
spi.send_recv('hello') #发送并接收5个字节
ZTMS作为从机
from pyb import SPI
spi = SPI(1,SPI.SLAVE,baudrate=4000000,polarity=0,phase=0) import time
from machine import Pin
from pyb import SPIspi = SPI(1,SPI.SLAVE,baudrate=4000000,polarity=0,phase=0)
#定义 cs A4 引脚拉高无效,拉低是有数据
cs=Pin('A4',Pin.IN)while True:time.sleep(3)if Pin('A4').value()==0:aa=spi.recv(5, timeout=50000)print(aa)print(spi.recv(50))print(Pin('A4').value())
串口输出:
>>>from pyb import SPI
>>>spi = SPI(1,SPI.MASTER,baudrate=4000000,polarity=0,phase=0)
>>>spi.send('hello')
>>>spi.send('hello')
from machine import Pin
cs=Pin('A4')
cs.init(cs.OUT, value=0)>>>from pyb import SPI
>>>spi = SPI(1,SPI.SLAVE,baudrate=4000000,polarity=0,phase=0)
>>>spi.recv(5)
b'hello'
>>> spi.recv(5, timeout=50000)
b'hello'
>>> spi.recv(5, timeout=50000)
b'hello'
>>> spi.recv(10, timeout=50000)
b'0hello0hel'
>>> spi.recv(20, timeout=50000)
b'lhellohellohellohell'
micropython-SPI通讯相关推荐
- 加密芯片SPI通讯的调试
SPI是串行外设接口(Serial Peripheral Interface)的缩写.是Motorola公司推出的一种同步串行接口技术,是一种高速的.全双工,同步的通信总线. SPI的通信原理很简单, ...
- 详细介绍GPIO、I2C、SPI通讯原理以及物理层原理
目录 一. GPIO 1. 什么是GPIO? 2. GPIO组成原理 3. GPIO工作原理 二. I2C 1. 什么是I2C? 2. I2C组成原理 3. I2C的特性 4. I2C的通讯模式 5. ...
- SPI通讯协议详解 基于STM32
SPI 协议简介 SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface),即串行外围设备接口,是 一种高速全双工的通信总线.它被广泛地使用在 ADC.L ...
- 咸鱼Micropython—SPI
咸鱼Micropython-SPI SPI是Serial peripheral interface(串行外设接口)的简称,它也是一个通用的串行通信接口.无论从硬件还是软件上看,SPI和I2C都很类 似 ...
- 基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 IC-MU磁绝对值编码器的SPI通讯和码盘数据处理 前言 一.硬件连接 二.STM32 cubmx配置模式 三.软件代码及思路 1.寄 ...
- Arduino使用u8g2库函数驱动4线/6线OLED屏幕(I2C/SPI通讯)附带库函数详解
话不多说,直接入正题: 常见的OLED通常有两种样式,如下图所示,分别是4线和6线控制 本人几乎浏览了网上所有关于控制OLED模块的教程,并都经过了项目实测:大力推荐u8g2这个库函数来控制,文章末尾 ...
- 57步进电机驱动板,可以通过编码器调速,支持SPI通讯屏显示,485通讯
57步进电机驱动板,可以通过编码器调速,支持SPI通讯屏显示,485通讯. 板子上面有电位器可电流设定或者485改电流设定. 最大电流支持4.5A,如果需要更大电流需要改元器件参数. 有启停和方向按键 ...
- STM32F103C8T6驱动6线OLED(SPI通讯)
传送门:Arduino使用u8g2库函数驱动4线/6线OLED屏幕(I2C/SPI通讯)附带库函数详解 [点击进入] 一.0.96寸SSD1306原理图(默认为SPI) 二.OLED硬件介绍及控制方式 ...
- STM32Cube学习笔记-SPI通讯
引言 使用STM32Cube开发东西最怕的就是写的代码太多,为什么呢?因为不会写,我深有体会.SPI通讯是一种常用的常用的通讯方式,同步.串行.同步代表着实时性好,串行代表着接线少,很多的设备愿意采 ...
- 串口RS232 RS485最本质的区别!-!I2C通讯协议 最简单的总线通讯!-深入理解SPi通讯协议!
5分钟看懂!串口RS232 RS485最本质的区别!-4分钟看懂!I2C通讯协议 最简单的总线通讯!-深入理解SPi通讯协议,5分钟看懂! 一.5分钟看懂!串口RS232 RS485最本质的区别! 二 ...
最新文章
- 遗传算法主程序(辅助)
- c++ 按键暂停继续 程序_CNC操作面板讲解,看看这些按键是什么意思
- 用git进行项目搭建
- 启明智显分享| 2.4寸旋钮串口屏在健身器材上的应用
- 小东《迷路的情人》MV
- Android之添加快捷方式(Shortcut)到手机桌面
- 【PTA天梯赛CCCC -2017决赛L1-6 】整除光棍 (20 分)(大数模拟除法)
- 20145203盖泽双《网络对抗技术》拓展:注入:shellcode及return-into-libc攻击
- 深入理解计算及系统 Chapter2 学习笔记
- 抓取Crash不让崩溃
- java8新日期时间类使用
- 7-1 是否同一棵二叉搜索树 (25 分)
- 不会真有人觉得聊天机器人难吧——微调BERT模型得到句子间的相似度
- Axure9(基础二)
- 新浪微博开放平台中的Redis实践
- 小柏实战学习Liunx(图文教程二十二)
- 提升网页加载速度 | google网站速度测试
- Phalloidin——Acti-stain555鬼笔环肽研究
- otter异常——zookeeper重新初始化
- 智慧城市的发展动力、推动因素、负面影响、挑战与应对
热门文章
- haar adaboost matlab,人脸检测算法之Haar-Adaboost分类器原理
- 美团校招实习生面试一面
- ubuntu执行uci出现 uci: error while loading shared libraries: lib
- python作图设置背景颜色_如何在matplotlib中设置绘图的外部背景颜色
- android canvas 背景图片,Android更改canvas背景颜色而不会丢失任何图纸
- 修正 Newton 公式
- 急刹车是否踩离合器?别犹豫,踩。
- 【实验技术笔记】Western Blotting 实验操作要点及数据分析
- php对接打码平台,好用的打码平台推荐
- 立交匝道中边桩坐标放样正反算程序RAMP