spi协议

时间:2022-11-15 16:58:30


SPI:Serial Peripheral Interface的简称, 是Motorola首先在其MC68HCXX系列处理器上定义的,一种同步串行外设接口。它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASH,RAM、网络控制器、LCD显示驱动器、A/D转换器和MCU, EEPROM,FLASH,实时时钟,AD转换器,还有DSP和数字信号解码器之间等。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。


SPI接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和从机选择线CS(有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。

以手上的一款LCD为例,分析SPI的时序。时序图 ​​

SPENB为片选使能,SPDA为MOSI,SPCK为时钟。在SPCK上升沿锁存信号。LCD数据格式 ​​

数据格式在应用里处理。这里只关注3线时序输出 

  1. #define CS_LOW s3c2410_gpio_setpin(S3C2410_GPG2,0)
  2. (S3C2410_GPG2,1)
  3. (S3C2410_GPE12,0)
  4. (S3C2410_GPE12,1)
  5. (S3C2410_GPE13,0)
  6. (S3C2410_GPE13,1)
  7. (uint addr,uint data)
  8. {
  9. ;
  10. ;
  11. (20);
  12. ;
  13. (20);
  14. ;
  15. (20);
  16. ;    片选使能
  17. (20);
  18.         
  19. for(ucLoop=8;ucLoop > 0; ucLoop--) {
  20. ;
  21. if(addr &(1<<(ucLoop-1))) {
  22. ;
  23. } else {
  24. ;
  25. }
  26. (10);
  27. ;
  28. (10);
  29. }
  30. for(ucLoop=8;ucLoop > 0; ucLoop--) {
  31. ;
  32. if(data &(1<<(ucLoop-1))) {
  33. ;
  34. } else {
  35. ;
  36. }
  37. (10);
  38. ;    //上升沿采集信号
  39. (10);
  40. }
  41. (10);
  42. ;
  43. }
  44. 注:用IO口模拟的三线,使能高/低有效,以及时钟上升沿/下降沿采样,均可在device寄存器设置。输入输出是可以同时进行的,并且,时钟可控(由master), 即可暂停,可延时。