关于SPI通信的问题
我用两个单片机(C8051F340)进行SPI通信,使用了4根线,分别是NSS,MOSI,MISO,SCK。一个作为主芯片,一个作为从芯片。从芯片主管显示,主芯片接收键盘输入,处理键盘信息后往从芯片发送显示命令。
现在遇到的问题是:把程序都烧进单片机后,上电,显示屏没有显示。断电,重新上电,显示屏就能显示了。不过,又这样断电上电测试了两三次后,显示屏就再也不显示了。单独测试从芯片,显示屏是可以显示的,说明从单片机也在工作。基本确定是SPI通信出了问题。顺便说下:程序都是调试好的,在相似的板子上都能够完美运行的。
现在我不知道如何来检查SPI的问题,各位有什么好的建议?
又做了一下测试,单独测试主单片机,主单片机可以成功发送数据,由于手头没有示波器,看不了数据波形。
测试代码如下,就是发送一个字节,用查询方式判断是否发送成功。
SPI0CN = 0x09;
SPI0DAT = 0x33;
while( SPIF == 0 );
SPIF = 0;
NSSMD0 = 1;
针对从单片机的测试,先修改了主单片机代码,使得SPI的片选从单片机信号始终选通,然后从单片机往主单片机发送数据,结果程序始终卡在while( SPIF == 0 )这句。难道是从单片机的SPI口有问题,还有什么方法可以测试SPI口的好坏吗?
从单片机接了一个320240的液晶,可以对液晶进行操作,单片机应该没坏吧。
各位还有什么建议?
完全无从下手啊,关键通信曾经成功过。
不知道怎么办啊,求高手
spi通信,需要规划自己的通信协议会不会是你这儿出来问题呢.,程序死了.你可以再加个指示灯闪烁之类的,检测下,从单片机是否死在某个地方
通信协议应该没有问题,使用的是成熟的程序,在几乎完全相同的板子上跑得很好。
我这个是新做的板,和老板子比只有一点点差别,几乎可以忽略,关于SPI的硬件连线完全相同,也找不出什么硬件问题。
目前可以确认主芯片没有问题,因为始终能对按键有响应,蜂鸣器能随按键按下发出声音,而从芯片貌似接收不到数据,都进不了SPI的中断。
主芯片每次发送1byte后,做一个延时,再试试
刚才单独对从芯片测试了一下,从芯片能够正常运行程序。让从芯片控制显示屏交替显示不同的两个界面,没有问题。
顶起来吧,看看有没有别的建议
还是没有人
还是没有人
当 主芯片spi通信速度过快,从芯片反应不过来,也会出现错误。你怎么知道从芯片 停在哪一句 ? 可以仿真么..
可以硬件仿真的。
测试从单片机的时候,我把断点设在while( SPIF == 0 )这句之后,结果程序始终执行不到,停止执行后,有个箭头光标就指向
while( SPIF == 0 )这句,应该就是说明程序一直就在执行这一句吧,我用的是uVision2。
单片机 死在这一句了,肯定是 你程序哪儿写错了.我没有用过这款单片机.....但是所有的基本上 都应该差不多, 发送前先查询,看看是否可以发送, 发送后嘛,我觉得可以不用管了.....
问题出的很奇葩。
实际上主芯片和从芯片的程序都是调试好的,在其他板子上都用的很好,硬件上与通信相关的部分都没有改动。
甚至于第一次把程序烧进去的时候,还通信成功了,通过按键设置显示屏的菜单什么的。但是调试过程中重启几次后,SPI通信就出问题了。目前看来从芯片的SPI口有点问题,我之前测试从芯片的通信口就是发送一个字节,不管主芯片能不能收到,只看从芯片能不能发送成功。当然,这样测试的时候,我把从芯片改为了主芯片模式。不过还是没有成功。
有什么其他测试一个芯片SPI口正常与否的方法吗?
学习了
学习了!好东西啊
小编的问题俺这今天重现了,重复上电,从机有时候正常,有时候貌似从机接收不到数据,数据一直得不到刷新,不知小编当初怎么解决的这个问题?谢谢了
还是看看SPI的时序吧
你好,我也遇到了和你相同的问题,请问小编解决了吗
小编人跑了