最近做了一款小工具,用到了SPI进行通讯,总结如下。
先简单介绍一下背景,主机是LM3S1138,从机是Mega32和Tiny13,采用的是四线(sck、fss、rx、tx)全双工。
LM3S1138芯片内部集成了两个ssi模块,任选一个只需作一些配置即可。从机Mega32,按照datasheet去做:先发送编程使能指令,再发送数据,这些都比较顺利。
按道理,与Tiny13的通讯应该也是差不多的。可是,理想与实现往往是有差距的,这个让笔者郁闷了好久。后来,通过抓官方提供的ISP时序来分析,发现在发起通讯之前,需要把fss脚先拉低,然后拉高,再一直拉低方可传输数据。但是,LM3S1138的ssi是一个模块,不能按照这个需求去修改。所以,笔者就自己模拟spi通讯,为Tiny13量身定做fss信号,果然没让笔者失望,而且也可以与Mega32成功交互。