利用单片机的I/O口通过软件模拟SPI总线的实现方法

spi(serial peripheral interfacer 串行外设接口)是摩托罗拉公司推出的一种同步串行通讯接口,用于微处理器臌控制器和外围扩展芯片之间的串行连接,现已发展成为一种工业标准,目前,各半导体公司推出了大量的带有spi接口的具有各种各样功能的芯片,如ram,eeprom,flashrom,a/d转换器、d/a转换器、led/led显示驱动器、i/o接口芯片、实时时钟、uart收发器等等,为用户的外围扩展提供了极其灵活而价廉的选择。由于spi总线接口只占用微处理器四个i/o口线,采用spi总线接口可以简化电路没计,节省很多常规电路中的接口器件和i/o口线,提高设计的可靠性。
现以 at89c205l单片机模拟spi总线操作串行eeprom 93ca6为例,如图1所示,介绍利用单片机的i/o口通过软件模拟spi总线的实现方法。在这里,仅介绍读命令的时序和应用子程序。
93c46存储器spi总线的工作原理
93ca6作为从设备,其spi接口使用4条i/o口线:串行时钟线(sk)、输出数据线do、输入数据线di和高电平有效的从机选择线cs。其数据的传输格式是高位(msb)在前,低位(lsb)在后。93c46的spi总线接口读命令时序如图2所示。
软件模拟spi接口的实现方法
对于不带spi串行总线接口的at89c2051单片 机来说,可以使用软件来模拟spi的操作,图1所示 为at89c2051单片机与串行eeprom 93c46的硬件 连接图,其中,p1.0模拟spi主设备的数据输出端 sdo,p1.2模拟spi的时钟输出端sck,p1.3模拟 spi的从机选择端scs,p1.1模拟spi的数据输入 sdi。
上电复位后首先先将p1.2(sck)的初始状态设置为0(空闲状态)。
读操作:at89c2051首先通过p1.0口发送1位起始位(1),2位操作码(10),6位被读的数据地址(a5a4a3a2a1a0),然后通过p1.1口读1位空位(0),之后再读l6位数据(高位在前)。
写操作:at89c2051首先通过p1.0口发送1位起始位(1),2位操作码(01),6位被写的数据地址(a5a4a3a2a1a0),之后通过p1.0口发送被写的l6位数据(高位在前),写操作之前要发送写允许命令,写之后要发送写禁止命令。
写允许操作(wen)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(11xxxx)。 写禁止操作(wds)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(00xxxx)。
下面介绍用c51模拟spi的子程序。
1. //首先定义好i/o口 2. sbit sdo=p1^0;3. sbit sdi=p1^1;4. sbit sck=p1^ 2;5. sbit scs=p1^3;6. sbit acc_7= acc^7;7. unsigned int spiread(unsigned char add) 8. { 9. unsigned char i;10. unsigned int datal6;11. add&=0x3f;/*6位地址*/ 12. add |=0x80;/*读操作码l0*/ 13. sdo=1;/*发送1为起始位*/ 14. sck=0;15. sck=1;16. for(i=0;<8;i++)/*发送操作码和地址*/ 17. { 18. if(add&0x80==1) 19. sdo=1;20. else 21. sdo=0;22. sck=0;/*从设备上升沿接收数据*/ 23. sck=1;24. add<<= 1;25. } 26. sck=1;/*从设备时钟线下降沿后发送数据,空读1位数据*/ 27. sck=0;28. datal6<<= 1;/*读16位数据*/ 29. for(i=0;<16;i++) 30. { 31. sck= 1;32. _nop_();33. if(sdi==1) 34. datal6|=0x01;35. sck =0;36. datal6< < =1;37. } 38. return datal6;39. } 对于不同的串行接口外围芯片,它们的时钟时序是不同的。上述子程序是针对在sck的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件。这些子程序也适用于在串行时钟)的上升沿输入和下降沿输出的其它各种串行外围接口芯片,只要在程序中改变p1.2(sck)的输出电平顺序进行相应调整即可。

场效应管与晶体三极管的比较
采购电子万能试验机能找哪些生产商?
睿士达(RESDA)独特的电子滤网技术
国家电网公司将加快推进三型两网世界一流战略落地
历史数据怎样阿里进行储存
利用单片机的I/O口通过软件模拟SPI总线的实现方法
四大战略助力汽车营销体系转型升级
新品voc在线监测设备推荐厂家
2030年中国汽车芯片市场规模将达290亿美元,国产传感器厂商湾测获近亿元Pre-A轮融资
总线与信号线分支之间该如何进行连接呢
AIGC时代和大模型对算力的影响
三星Galaxy Nexus抵港开卖 售8500港币
LP2950-N和LP2951-N微电压调节器的功能特性及作用
MCU!MCU!2012论剑微控制器细分市场
事关传感器行业又一大盛事,来看看是什么?
对于ARVR设备空间监测和定位技术的介绍和应用分析
泰克公司马来西亚新服务中心正式开张
IBM 董事长、首席执行官 Arvind Krishna:技术发展迎来“黄金时期”愿与联想携手共拓新机遇
手环也有“曲面屏” 华为手环B6 既是耳机又是手环
基于一个ADXL345陀螺仪传感器的PCB零件