原理图:
SPI简介:
SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI接口 主要应用在 EEPROM,FLASH,实时 时钟 ,AD转换器等芯片,还有数字信号处理器和数字信号解码器之间。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种 通信协议 ,比如AT91RM9200。
SPI连接图

# SPI总线 四种工作方式
SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对 传输协议 没有重大的影响。
CPOL
时钟极性选择,为0时SPI总线空闲为低电平,为1时SPI总线空闲为高电平
CPHA 时钟相位选择,为0时在SCK第一个跳变沿采样,为1时在SCK第二个跳变沿采样
Mode 0 SCLK 空闲是为低电平,数据在上升沿有效
Mode 1 SCLK 空闲是为低电平,数据在下降沿有效
Mode 2 SCLK 空闲是为高电平,数据在下降沿有效
Mode 3 SCLK 空闲是为高电平,数据在上升沿有效

//定义SD卡需要的4根信号线
sbit SD_CLK = P1^4;
sbit SD_DI = P1^6;
sbit SD_DO = P1^5;
sbit SD_CS = P1^7;
//写一字节到SD卡,模拟SPI总线方式
void SdWrite(unsigned char n)
{
unsigned char i;
for(i=8;i;i--){
SD_CLK=0;
SD_DI=(n&0x80);//上升沿写入数据
n<<=1;
SD_CLK=1;
}
SD_DI=1;
}
//从SD卡读一字节,模拟SPI总线方式
unsigned char SdRead()
{
unsigned char n,i;
for(i=8;i;i--)
{
SD_CLK=0;
SD_CLK=1;
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删