I2C有很多优点,对于用户来说,两根线,挂好多设备,在速度要求不是很高的场合完全是够用的.但是I2C相对来说就是软件上的编写比较复杂,需要涉及到复杂的状态机,对CPU来说,处理效率并不高,因为同样是发送数据,就涉及多多种状态的转换,是发地址呢,还是发数据,这个就比较纠结了,在软件上就比较麻烦了.而SPI,虽然线很多,但是速度非常快.
目前用过很多不同的芯片上的I2C,虽然都是点灯的水平. 体验上来说,比较麻烦,比如430,如果要考虑到功耗,应该尽量进入休眠,这个I2C的发送中,CPU空闲率可以达到99%的,但是如果休眠,再进中断,继续判断逻辑,就比较麻烦了,就TI官方的程序也没有这么干.比如STM32,直接使用DMA模式,这样可以是可以,也节省一些时间,但是只是为了读一个寄存器呢,如果是读一个寄存器就查询等待,那么在这个等待过程都可以让SPI发了几十个字节了.
当然I2C在正常传输,麻烦也顶多在协议状态的转换,如果涉及到多主机,然后总线丢失呢?又不像CAN一样的管理,这样就很麻烦了.大家说的万能的模拟I2C在这里就一点办法都没有了,当然,还有一个毫无办法的事情,就是做I2C从机,做I2C从机遇到的问题就是必须有跟随主机的引脚,出于功耗的考虑,还要去做一些休眠,地址唤醒,那么,你就完全不能避开硬件I2C了.
当然I2C也不是全是毛病,比如做什么开源硬件啊,这些都是很喜欢的接口,统一,而且方便.对于用户来说,不管你是I2C还是SPI还是怎么怎么的,只要用起来好用,并且连线简单,就是最重要的了.