转自:http://hi.baidu.com/serial_story/item/47cc07d68d35e6cd1b72b41d
在了解了基本的SPI之后,在Linux内核源码里面,发现关于SPI来说,有个叫做bitbang的东西,所以有点迷惑,想搞清楚bitbang是啥意思。
找了点资料,大概看明白了:
首先,对于多数情况来说,我们所用的SPI,都是有对应的SPI的控制器的,其负责和外部SPI设备进行通信,负责两者通信时候的信号之间的同步,保证信号的timing都符合SPI协议,保证可以正常进行SPI通信。
但是有些时候,没有此对应的硬件上的SPI控制器,而还想要和SPI设备通信,那么就只能用GPIO端口去模拟对应的SPI接口的对应的pin:片选CS,数据输入Data In,数据输出Data Out,始终Clock,去模拟SPI协议,和对应spi设备进行通信。所以,此时你对每个端口的操作,作为编程者,你自己要去负责信号的同步,保证timing符合协议规定,才能正常进行SPI通信。
这样的SPI的bit-bang,优点是不需要SPI的控制器了,但是缺点很明显,除了要用户自己负责同步,timing等事情之外,相对来说,即使本身SPI设备支持以很高的频率运行,可以实现很好的性能,但是以bit-bang的方式去使用的话,实际性能往往很差。
最后,可以用一句话来解释,:
【引用】
1。
http://www.epanorama.net/links/serialbus.html
2。Serial Interfaces, Part Deux I2C and SPI
http://www-micro.deis.unibo.it/~romani/Dida03/lezioni/eugeneho-serialcomm.ppt
3。SPI,I2C,big,banging 在SPI或I2C文档里,有个big-banging是什么意思
http://forum.eepw.com.cn/thread/91427/1