SPI技术咨询

zhmstone   2010-5-14 13:36 楼主
                                 如果是轮流选择从芯片,SPI接口能够驱动多少负载?

回复评论 (7)

这其实取决于从芯片的负载情况。

一般情况下,我想驱动4个SPI从芯片是可以的。
点赞  2010-5-14 14:02
                                 谢谢!
点赞  2010-5-14 14:33
                                 谢谢
点赞  2010-5-14 17:09
                                 咦,发不了帖子了。好像。
点赞  2010-5-28 16:22
STM8A   SPI 之通讯方式:全双工?半双工?单工?

单工,半双工,全双工都是数据传输模式来的

单工:数据的发送方向只能固定一个方向,比如有A,B两个节点.只能是A发送,B接收.而B不能发送,单一方向的数据传输

半双工:线路两端的用户(或节点)不能同时发送数据,A发送,B接收,或者B发送,A接收

全双工:双方可以同时接收或发送数据的,这样以来,这条线路的速率就提高一半

根据以上定义,全双工的意义在于可以(并非一定要)同时接收和发送数据。

SPI总线设计出来是以解决全双工通讯为目的的。而SPI解决方案是主、从器件中两个移位的组成的环形总线,在某种需求(互换数据)和默契(主对从发送CMD,告诉从说下一个SPI周期开始互换)下,主器件向Txbuffer写入数据,同时从器件也向自己的TXbuffer写入数据,按照主器件的SCK节奏以及相应时序(上升沿进行一个位的移位操作)。
这样一来,8个周期后,主从的Txbuffer之间完成了互换的目的,即,八个CLOCK后,传输两个字节。实现了高速传输的全双工的目的。

但是,结合具体应用,比如有SPI硬件的单片机与具备SPI接口的E2PROM,LCD,SDCard等的通讯,似乎进行的都不是全双工通讯,依然是半双工通讯,一般而言就是主器件(单片机)发送命令,从器件(SDCard等)给出一个反应,接着根据命令从器件送出相应的数据给主器件。正是因为如此,在很多情况下,如单片机没有SPI硬件,也可以用IO模拟SPI,只要时序正确也是可以的。而对于有SPI硬件的单片机来说,只需设置相应的寄存器使得单片机处于主器件地位,MOSI和MISO端口工作正常,选择好SCK时钟频率即可完成初始化。下面将结合STM8A尝试初始化SPI。

打开STM8A的用户手册,找到SPI寄存器描述那一页,对着看SPI_CR1和SPI_CR2各个bit位的含义。
SPI_CR1                address 0x00 5200                                赋值
BIT 7                                                                  0(最高位先传输)
  BIT 6                                                                1(SPI使能)
BIT [5:3]                                                        000(fmaster二分频)
BIT 2                                                                1(主器件)
BIT 1                                                                0(SCK从0电平开始)
BIT 0                                                                0(第一个CLOCK开始第一个数据捕捉)

所以,
define SPI_CR1 volatile @0x5200
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
SPI_CR1=0x44;










由于是将SPI 设置成全双工正常模式(虽然不是用于全双工通讯),所以SPI_CR2中的BDM,BDOE,RXONLY不用设置,同时,不用CRC功能,且硬件上选择从器件,故SPI_CR2保持reset值不变,不用设置。
点赞  2010-5-28 16:23
BDM: Bi-directional data mode enable
0: 2-line uni-directional data mode selected
1: 1-line bi-directional data mode selected

BDOE: Output enable in bi-directional mode
This bit combined with BDM bit selects the direction of transfer in bidirectional
mode
0: Output disabled (receive-only mode)
1: Output enabled (transmit-only mode)
In master mode, the MOSI pin is used and in slave mode, the MISO pin is
used.
RXONLY: Receive only
0: Full duplex (Transmit and receive)
1: Output disabled (Receive only mode)
This bit combined with BDM bit selects the direction of transfer in 2 line unidirectional
mode
This bit is also useful in a multi-slave system in which this particular slave is
not accessed, the output from the accessed slave is not corrupted.

如果设置BDM=0,且RXONLY=0,就是STM8A 的SPI的常规用法,即全双工。
而如果BDM=1,即一个数据线同时负责收发,bidirectional?就可以通过BDOE为0或者为1来切换收和发的方向,即如果要发送数据必须先将BDOE置一,而要收数据得先给BDOE置零?
而如果BDM=0,且RXONLY=1(1: Output disabled (Receive only mode)),则意味着什么?
点赞  2010-5-28 16:35
RXONLY: Receive only
0: Full duplex (Transmit and receive)
1: Output disabled (Receive only mode)
This bit combined with BDM bit selects the direction of transfer in 2 line unidirectional
mode
This bit is also useful in a multi-slave system in which this particular slave is
not accessed, the output from the accessed slave is not corrupted.
点赞  2010-5-28 16:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复