软件模拟spi的注意事项
前几天遇到了软件模拟spi的时候,读和写不一致的现象,后来仔细研究了一下,其实是时序性问题不对。
spi的有四种时序,硬件实现的时候,很简单,初始化后直接调用api即可。但是软件模拟就比较麻烦。
举例如下:
读时序如下:

写时序如下:

这两个结合起来就是下面四种spi模式的第四种

也就是模式2,如下所示:

值得注意的是:
按照上面的时序图,单片机应该是在上升沿输出数据(即写数据),
但是,读数据,看时序图好像是也上上升沿,其实是错误的,应该是下降沿读数据,即单片机在下降沿的时候采样丛集的数据。
网络参考:https://blog.csdn.net/ybhuangfugui/article/details/52068759
2.模拟SPI初始化

3.模拟SPI写函数(时序)

这种时序的写法在学习过51的朋友来看再熟悉不过了。
注意:
1、高字节在前,说以上面红色标记的的部分就是将高位先输出,依次移位输出。
2、在时钟的上升沿将数据输出,所以在“时钟-高”之前将数据输出。
4.模拟SPI读函数(时序)

读时序和写时序原理类似,但还是存在差异。
注意:
1、高位先输出来(从机输出),所以,需要将读取的数据依次移向高位。
2、在时钟的下降沿读出数据,所以,我红色标记的部分可以看得出来,是在时钟为低之后才去读取数据。
软件模拟spi的注意事项的更多相关文章
- 使用软件模拟spi 时序时注意点
软件模拟 spi 时序有以下几个点需要注意: cs 使能后到第一个 sck 边沿需要延时. 最后一个sck 边沿到下一个 cs 需要延时. sck 的高电平和低电平本身需要维持时间. mosi 需要先 ...
- STM32F10x_SPI(硬件接口 + 软件模拟)读写Flash(25Q16)
推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来! http://www.captainbed.net/strongerhuang Ⅰ.写在前 ...
- STM32 + RC522(SPI2 和 模拟SPI)
STM32 + RC522(SPI2 和 模拟SPI) 一. STM32 + RC522(SPI2 模式) 1. 头文件: rc522.h #include "stm32f10x.h&quo ...
- 利用C51单片机模拟SPI进行双机通信
SPI协议简述 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口.由Motorola首创.SPI接口主要应用在 EEPROM,FLASH,实时时 ...
- stm32软件模拟IIC读取PX4FLOW光流传感器数据
这段时间在做全国光电设计大赛,用到了px4的px4flow光流传感器,用软件模拟iic读取数据不定期会导致px4flow死机,查了资料和光流的源码,发现这个光流用了stm32的硬件iic,所以对软件模 ...
- linux enc28j60网卡驱动移植(硬件spi和模拟spi)
本来想移植DM9000网卡的驱动,无奈硬件出了点问题,通过杜邦线链接开发板和DM9000网卡模块,系统上电,还没加载网卡驱动就直接崩溃了,找不到原因...刚好手上有一个enc28j60的网卡模块,于是 ...
- 模拟SPI协议时序
SPI是串行外设接口总线,摩托罗拉公司开发的一种全双工,同步通信总线,有四线制和三线制. 在单片机系统应用中,单片机常常是被用来当做主机(MASTER),外围器件被当做从机(SLAVE). 所以,在以 ...
- I2C总线协议的软件模拟实现方法
I2C总线协议的软件模拟实现方法 在上一篇博客中已经讲过I2C总线通信协议,本文讲述I2C总线协议的软件模拟实现方法. 1. 简述 所谓的I2C总线协议的软件模拟实现方法,就是用软件控制GPIO的输入 ...
- 软件模拟I2C通讯
I2C协议概述,有相当详细的名词解释: 通信数量受限于地址空间和400Pf总线电容. 所有的数据传输过程中,SDA线的电平变化必须在SCL为低电平时进行,SDA线的电平在SCL线为高电平时要保持稳定. ...
随机推荐
- web api 的 安全 认证问题 , 对外开放 的 时候 需要考虑到安全的问题
关于 OWIN OAuth , web api的认证,全局验证, 安全方面的验证 有必要 去 自己捣鼓一下.
- GitHub学习之路1
对于代码的管理以及维护上,GitHub不失为一个较为明智的选择.而对于GitHub的灵活应用也是相当重要的,以下记录为以防自己忘记. 1. 创建SSH Key ssh-keygen -t rsa –C ...
- Ubuntu16.04-Server固定静态IP
1. 查看IP信息-ifconfig 2.修改配置文件---sudo vim /etc/network/interfaces 修改为静态ip 配置说明: auto ens33:使用的网络接口 ifa ...
- 基于Flask框架搭建视频网站的学习日志(三)之原始web表单
基于Flask框架搭建视频网站的学习日志(三)1.原始Web 表单 本节主要用于体验一下前端后端直接数据的交互,样例不是太完善,下一节会加入Flash处理,稍微完善一下页面 (备注:建议先阅读廖雪峰老 ...
- Git详解之常用命令
注意:此篇文章中的绝大部分内容来自摘抄,查阅人员请注意
- C# 定时器导致的内存泄露问题
C# 中有三种定时器,System.Windows.Forms 中的定时器和 System.Timers.Timer 的工作方式是完全一样的,所以,这里我们仅讨论 System.Timers.Time ...
- Mysql Innodb cluster集群搭建
之前搭建过一个Mysql Ndb cluster集群,但是mysql版本是5.7的,看到官网上mysql8的还是开发者版本,所以尝试搭建下mysql Innodb cluster集群. MySQL的高 ...
- 使用nginx搭建一个可用的静态资源web服务器
新建dlib目录,dlib里面放着很多index.html文件 修改conf文件 配置location,/所有的请求,这里一般使用alias,这样url后面的路径和dlib/下面的路径是一一对应的,如 ...
- wordpress 如何正确升级
http://www.admin5.com/article/20141230/578710.shtml 正确的版本升级应该是,备份数据库和文件,然后禁用所有的插件后在执行升级.这样也避免不了升级过后启 ...
- eclipse使用jdbc方式连接sql server 2012数据库史上最新最详细教程(2015年4月已亲测)
步骤分为3部:1.通过sql server 配置管理器配置1433端口 2.将sqljdbc41.jar类库添加到对应的工程中 3.在java程序中连接数据库 步骤1:打开sql server ...