你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

AT89C205l单片机模拟SPI总线操作串行EEPROM 93CA6

[复制链接]
gaosmile 发布时间:2020-8-14 21:51
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总线的实现方法。在这里,仅介绍读命令的时序和应用子程序。
微信图片_20200814214956.png
93C46存储器SPI总线的工作原理

93CA6作为从设备,其SPI接口使用4条I/O口线:串行时钟线(SK)、输出数据线DO、输入数据线DI和高电平有效的从机选择线CS。其数据的传输格式是高位(MSB)在前,低位(LsB)在后。93C46的SPI总线接口读命令时序如图2所示。
微信图片_20200814214959.png
软件模拟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. 1. //首先定义好I/O口  
  2. 2. sbit SDO=P1^0;
  3. 3. sbit SDI=P1^1;
  4. 4. sbit SCK=P1^ 2;
  5. 5. sbit SCS=P1^3;
  6. 6. sbit ACC_7= ACC^7;
  7. 7. unsigned int SpiRead(unsigned char add)  
  8. 8. {  
  9. 9.     unsigned char i;
  10. 10.     unsigned int datal6;
  11. 11.     add&=0x3f;/*6位地址*/  
  12. 12.     add |=0x80;/*读操作码l0*/  
  13. 13.     SDO=1;/*发送1为起始位*/  
  14. 14.     SCK=0;
  15. 15.     SCK=1;
  16. 16.     for(i=0;<8;i++)/*发送操作码和地址*/  
  17. 17.     {  
  18. 18.         if(add&0x80==1)  
  19. 19.             SDO=1;
  20. 20.         else   
  21. 21.             SDO=0;
  22. 22.         SCK=0;/*从设备上升沿接收数据*/  
  23. 23.         SCK=1;
  24. 24.         add<<= 1;
  25. 25.     }  
  26. 26.     SCK=1;/*从设备时钟线下降沿后发送数据,空读1位数据*/  
  27. 27.     SCK=0;
  28. 28.     datal6<<= 1;/*读16位数据*/  
  29. 29.     for(i=0;<16;i++)  
  30. 30.     {  
  31. 31.         SCK= 1;
  32. 32.         _nop_();
  33. 33.         if(SDI==1)  
  34. 34.             datal6|=0x01;
  35. 35.         SCK =0;
  36. 36.         datal6< < =1;
  37. 37.     }  
  38. 38.     return datal6;
  39. 39. }
复制代码

对于不同的串行接口外围芯片,它们的时钟时序是不同的。上述子程序是针对在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件。这些子程序也适用于在串行时钟)的上升沿输入和下降沿输出的其它各种串行外围接口芯片,只要在程序中改变P1.2(SCK)的输出电平顺序进行相应调整即可。
收藏 评论0 发布时间:2020-8-14 21:51

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版