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

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口线,提高设计的可靠性。
! A$ Z/ K( g7 m/ Y# _* v

, H4 e- h1 T) U现以 AT89C205l单片机模拟SPI总线操作串行EEPROM 93CA6为例,如图1所示,介绍利用单片机的I/O口通过软件模拟SPI总线的实现方法。在这里,仅介绍读命令的时序和应用子程序。
0 j/ Y* f( x5 M8 Y3 `6 [/ u, M 微信图片_20200814214956.png
$ s% I/ B: C2 N# o: m93C46存储器SPI总线的工作原理
4 E8 X/ [6 {5 \5 X- C
+ m; p  |( Q1 {" U: M( n- E93CA6作为从设备,其SPI接口使用4条I/O口线:串行时钟线(SK)、输出数据线DO、输入数据线DI和高电平有效的从机选择线CS。其数据的传输格式是高位(MSB)在前,低位(LsB)在后。93C46的SPI总线接口读命令时序如图2所示。
7 x. C: v8 |; f6 v5 X 微信图片_20200814214959.png
' F1 {9 D( |- _软件模拟SPI接口的实现方法 * g( R, Z5 V0 j! P$ }
( g/ K* q. M1 V5 q3 B# G
对于不带SPI串行总线接口的AT89C2051单片 机来说,可以使用软件来模拟SPI的操作,图1所示 为AT89C2051单片机与串行EEPROM 93C46的硬件 连接图,其中,P1.0模拟SPI主设备的数据输出端 SDO,P1.2模拟SPI的时钟输出端SCK,P1.3模拟 SPI的从机选择端SCS,P1.1模拟SPI的数据输入 SDI。
# T0 m, W3 c# S9 P6 }- ?

, u. ]5 u) W5 _7 M0 O( M% N% ]! D上电复位后首先先将P1.2(SCK)的初始状态设置为0(空闲状态)。1 w7 G0 O# b. M7 i& @, x/ Z- I
% G% F% L( \6 g+ g4 y6 I# k7 C
读操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(10),6位被读的数据地址(A5A4A3A2A1A0),然后通过P1.1口读1位空位(0),之后再读l6位数据(高位在前)。' c( S8 a8 e5 A9 G. i7 ^1 t5 R

7 J: m7 X; R* Z9 ]* k- _7 f写操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(01),6位被写的数据地址(A5A4A3A2A1A0),之后通过P1.0口发送被写的l6位数据(高位在前),写操作之前要发送写允许命令,写之后要发送写禁止命令。
; o* T8 h; ]! b4 e2 V' S) G
% ?7 i; t2 h2 U; g/ E1 e1 ?
写允许操作(WEN)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(11XXXX)。              写禁止操作(WDS)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(00XXXX)。* |- Y3 R4 J4 w! d6 Y$ Z* B
下面介绍用C51模拟SPI的子程序。$ g& `! Q: o, R% _. G. q
  1. 7 c8 r: @' @( z) Z
  2. 1. //首先定义好I/O口  0 A6 u& U" }0 g" a% [; }  h
  3. 2. sbit SDO=P1^0;3 G+ [# {) a( L: x5 {/ i% G
  4. 3. sbit SDI=P1^1;
    6 a; b6 S8 |" }1 _; S
  5. 4. sbit SCK=P1^ 2;+ L; N3 ^5 {/ S$ R/ h3 d
  6. 5. sbit SCS=P1^3;7 L% P; u" d" T" B# m& y
  7. 6. sbit ACC_7= ACC^7;
    ' k: W9 k# J9 B5 |& L2 ~, z
  8. 7. unsigned int SpiRead(unsigned char add)  
    ' x  l4 M, X( ]; M1 I
  9. 8. {  
    ; |% O% k2 G( Z: |% a2 N
  10. 9.     unsigned char i;, R9 Q. a! I+ {: ]) l3 b4 V6 d
  11. 10.     unsigned int datal6;
    ; K! a$ e( E8 X
  12. 11.     add&=0x3f;/*6位地址*/  
    6 x0 ]3 v, ?9 E/ Y, M( l: p
  13. 12.     add |=0x80;/*读操作码l0*/  
    ) T( r% ~. h6 Q' {6 E% Q: k& u6 N3 Y: P
  14. 13.     SDO=1;/*发送1为起始位*/  5 J! X: Z6 C+ q
  15. 14.     SCK=0;
    ) j+ F# @/ \2 F2 j
  16. 15.     SCK=1;
    * W* ^3 r( ^0 f' r  e! e
  17. 16.     for(i=0;<8;i++)/*发送操作码和地址*/  
    $ J1 H& v5 a* d9 J
  18. 17.     {  
    , k& `' C: P; Z0 z2 r" n
  19. 18.         if(add&0x80==1)  
    , I; r  [  @" B
  20. 19.             SDO=1;
    " ?" e& [+ I" A! s0 R0 ~# ?0 j* q
  21. 20.         else   
    ) a0 _, g/ E: U! S
  22. 21.             SDO=0;1 U- t1 m! Y% ~+ |
  23. 22.         SCK=0;/*从设备上升沿接收数据*/  
    3 u/ F3 e& _. ?$ l5 S$ ^
  24. 23.         SCK=1;
    : p1 |& C. j1 O( k
  25. 24.         add<<= 1;9 d, L, t5 D; O7 y
  26. 25.     }  6 J- k- ^8 F/ K9 ]9 f9 x
  27. 26.     SCK=1;/*从设备时钟线下降沿后发送数据,空读1位数据*/  1 g" ^! U9 x) R- Z& b
  28. 27.     SCK=0;6 u& k$ l+ O  J" L) e2 n5 _
  29. 28.     datal6<<= 1;/*读16位数据*/  % u$ O: N# z3 `' ]1 F7 o6 g5 R
  30. 29.     for(i=0;<16;i++)  
      m  r# b' `7 V0 b6 K
  31. 30.     {  
    1 J+ n$ H4 _" X) O4 g
  32. 31.         SCK= 1;
      z; ~7 t4 w% Z  J- b. x( }* Q+ V
  33. 32.         _nop_();
    + D% K9 K5 }& d8 U
  34. 33.         if(SDI==1)  % f& N( O' D) F7 `
  35. 34.             datal6|=0x01;
    2 C' \4 x' `# U: H
  36. 35.         SCK =0;; `; |+ F2 U& N) n( V* p1 C5 d7 G
  37. 36.         datal6< < =1;6 m3 Q$ G2 w) ]( N" B& r
  38. 37.     }  & U0 F; }' q' f
  39. 38.     return datal6;
    & M9 c  w* C$ u; P' Q" J1 d
  40. 39. }
复制代码
  r, L4 S7 j& V2 V! o* O
对于不同的串行接口外围芯片,它们的时钟时序是不同的。上述子程序是针对在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件。这些子程序也适用于在串行时钟)的上升沿输入和下降沿输出的其它各种串行外围接口芯片,只要在程序中改变P1.2(SCK)的输出电平顺序进行相应调整即可。
赞 收藏 评论0 发布时间:2020-8-14 21:51

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版