标题: 请问下SPI总线通信时,为什么先要给MISO高电平? [打印本页]

作者: yuwei51    时间: 2020-3-5 21:11
标题: 请问下SPI总线通信时,为什么先要给MISO高电平?
void write(uchar a)
{
        uchar i=0;
        SI=1;  ####请教下各位大神,为什么这个位置要置1,我试了下,写0是不行的。
        for(i=0;i<8;i++)                  //8位数据串行输出
        {
                SCK=0;                          //时钟 低电平
                SO=(a&0x80);         //口首先输出高位
                a=a<<1;                          //a左移一位,为下一次输出做准备
                SCK=1;                          //时钟上升沿 , 存储器读电平
                delay(5);                  //延时一小会
        }
}


作者: eastjack    时间: 2020-3-5 23:01
si是输入?为什么写呢
作者: faguiq    时间: 2020-3-6 00:58
发送数据SI不用写就行了,写0就接收不到数据了,SPI原则是发送数据同时会把从机读出一次,不管有没有用,你可以看一下SPI原则,还有文中左移一位也不是你理解的为下一次输出做准备,而是最低位为0表示发送完成,最高位为识别位
作者: yuwei51    时间: 2020-3-6 11:47
eastjack 发表于 2020-3-5 23:01
si是输入?为什么写呢

SI是单片机的SPI数据输入接口,也就是MISO接口,我简写成SI.我现在只是想写一个单片机从SPI读数据的程序。奇怪的是,这个SI我写1就正常可以读出数据,只要写0,就读不出任何数据。
作者: yuwei51    时间: 2020-3-6 11:49
faguiq 发表于 2020-3-6 00:58
发送数据SI不用写就行了,写0就接收不到数据了,SPI原则是发送数据同时会把从机读出一次,不管有没有用,你 ...

SI是单片机的SPI数据输入接口,也就是MISO接口,我简写成SI.我现在只是想写一个单片机从SPI读数据的程序。奇怪的是,这个SI我写1就正常可以读出数据,只要写0,就读不出任何数据。
作者: faguiq    时间: 2020-3-6 13:35
yuwei51 发表于 2020-3-6 11:49
SI是单片机的SPI数据输入接口,也就是MISO接口,我简写成SI.我现在只是想写一个单片机从SPI读数据的程序 ...

接收数据不用写SI,直接发送指令就行,还有接收数据要再发送一次,等于要接收一次数据,主机要发送两次
作者: yuwei51    时间: 2020-3-6 15:02
faguiq 发表于 2020-3-6 00:58
发送数据SI不用写就行了,写0就接收不到数据了,SPI原则是发送数据同时会把从机读出一次,不管有没有用,你 ...

确实,测试了下,这个MISO什么都不写就可以,写1也可以,就是不能写0.多谢。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1