关于IO模拟时序(SPI)的注意事项

原则:有硬件I2C、SPI时尽量用硬件操作,省去IO模拟繁琐的时序调试。但在内部资源不够时就要用IO模拟总线了。

关于短延时:模拟时序时是否需要延时要看MCU与device的相对速度。比如I2C如果400K的速率和MCU动辄几十M的速率不再一个量级,肯定要通过延时调整时序;但对于SPI因为其速度很高,甚至有的比单片机的速度还高,这时就没必要延时了。

关于IO模拟的收发函数是否要合并成一个:对于SPI因为是全双工,所以可以分开,当然也可以合并成一个(发送时不需要返回值,而接收时此时参数是要发送的数据,返回值是要读的值)

关于在什么跳变沿操作:比如芯片手册中说到在上升沿采样/锁定(也就是在搞定平之后值必须稳定),那么单个位bit的收发都应该在0->1之间进行操作。

关于时钟极性和时钟相位:CPOL时钟极性只是说明了空闲时总线的电平状态:CPOL=1表明空闲时时钟是搞定平;否则是低电平。

            CPOA时钟相位说明了在第几个跳变沿进行采样,CPOA=0表明在第一个沿进行采样,否则在第二个沿。

时间: 2024-10-14 12:10:14

关于IO模拟时序(SPI)的注意事项的相关文章

用IO模拟串口协议发送数据

<pre name="code" class="cpp">//文件usend.h #ifndef _USEND_H_ #define _USEND_H_ //====红外接收相关定义============================= #define PuTx_High (P_uTx = 1) //数据高 #define PuTx_Low (P_uTx = 0) //数据低 #define V_SendDatNum 6//6 //发送数据字节数 /

FPGA静态时序分析——IO口时序(Input Delay /output Delay)(转载)

转载地址:http://www.cnblogs.com/linjie-swust/archive/2012/03/01/FPGA.html 1.1  概述 在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束和时序例外约束才能实现PCB板级的时序收敛.因此,FPGA时序约束中IO口时序约束也是一个重点.只有约束正确才能在高速情况下保证FPGA和外部器件通信正确. 1.2  FPGA整体概念 由于IO口时序约束分析是针对于电路板整个系统进行时序分析,所以FPGA需要作为一个

spi总线注意事项和linux下使用实战

spi总线注意事项和linux下使用实战 spi一般是4线(CS.MISO.MOSI.SCK)或者3线(MISO和MOSI线合并),当然这里忽略了设备芯片的电源.地等其他线.一条spi总线上只有一个master,slave根据片选情况可以有多个,但同一时间只能有一个工作.通过片选cs信号来区分.这里只关心spi总线的外设,所以不用像spi host controller驱动及内核spi_bus_type那样关心很多spi的细节.具体协议参见<SPI_motorola_specification.

IO SPI FLASH W25Q64B IO模拟SPI时序,使用FLASH 外设!W25Q64B

#include "iospiflash.h" /*******************************************//// This is a IOSPI (simulater by IO)// // Lib For Driver Flash W25Q64BV//*******************************************///sbit IOFLASHSPI_CS = P1^0;//sbit IOFLASHSPI_DIN = P1^3;/

时序设计的注意事项

1.在程序中设定时序的时候一定要先选择好对应的单片机,即便是晶振相同的开发板,52单片机和51单片机写出来相同程序的时序也是不一样的. 2.在写时序时一定要参考说明书. 3.在keil软件中一定要选择好对应的振荡频率再开始调时序. 4.另外再完成ds18b20程序时,转换也是需要实现时间的,比如12位的AD就需要750ms,这个时间如果不设置也不能显示出温度. eg. void  Ds18b20ChangTemp(){ Ds18b20Init(); delay1ms(1); Ds18b20Wri

标准IO的简单应用,动静态库,读取系统时间并打印,模拟ls -l功能

2015.2.27星期五,小雨 标准IO实现的复制功能: #include <stdio.h>#include <errno.h> #define N 64 int main(int argc, char *argv[]){ int n; char buf[N]; FILE *fps, *fpd; if(argc < 3) { printf("usage : %s <src_file><dst_file>\n",argv[0]);

SPI总线协议及SPI时序图详解

SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议.SPI是一个环形总线结构,由ss(cs).sck.sdi.sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换. 上升沿发送.下降沿接收.高位先发送.上升沿到来

同步时序设计时应值得注意的事项

同步时序设计时一下事项应值得注意: 异步时钟域的数据转换. 组合逻辑电路的设计方法. 同步时序电路的时钟设计. 同步时序电路的延迟.同步时序电路的延迟最常用的设计方法是用分频或者倍频的时钟或者同步计数器完成所需的延迟,对比较大的和特殊定时要求的延时,一般用高速时钟产生一个计数器,根据计数产生延迟;对于比较小的延迟,可以用D触发器打一下,这样不仅可以使信号延时了一个时钟周期,而且完成了信号与时钟的初次同步.在输入信号采样和增加时序约束余量中使用. 另外,还有用行为级方法描述延迟,如"#5 a<

stm32 普通IO口模拟串口通信

普通IO口模拟串口通信 串口通信协议 串口传输 默认 波特率9600 1起始位 1停止位 其他0 数据位是8位(注意图上的给错了). 传输时,从起始位开始,从一个数据的低位(LSB)开始发送,如图从左向右的顺序,对电平拉高或拉低,最后停止位时拉高. 波特率大小,改变延时时间即可.例如9600 波特率    根据公式 : 1/9600=0.000104s(大致) 也就是说每发送1bit延时104us (下面我用9600波特率来说,代码用的是19200) 串口发送       将电平拉低 延时104