TWI=I2C--->SMBUS...
一般多是一主多从系统,而不太主张多主多从系统,这样通讯体系过于复杂. 而且从机一般是小容量的MCU,很难构成复杂的通讯网络.
再一般的从机实际都是I2C器件,地址不重复但固定.
所以,SCL的方向一般是不变的,即由主机提供一主多从系统时钟信号.
虽说SCL/SDA的上拉电阻应该由主机提供,但分离的系统从机由于担心误动作
都接有自己的上拉电阻,而且一般都又主机唤醒,以便达到从机在不通讯时的低功耗.
由于从机各自的差异,就有高速低速设备速率匹配的问题.
在一主多从系统只需主机"一人考虑"即可,从机只需按与主机实现约定的速率通讯.
一般采用从机采用拉低SCL与主机速率匹配...
这里给个USI接口的实战片段...(USI=I2C或SPI)
void UsiObj::Exec(void) { unsigned char temp; DDRB &= ~(_BV(SCL) | _BV(SDA)); //SCL设置为输入方式,SCL信号由主机提供 while (temp = (PINB & _BV(SCL)));//等待SCL=0主机处理结束 PORTB &= ~_BV(SCL);//保持低电平 DDRB |= _BV(SCL);//占用SCL总线,以便长期处理
|
文章评论(0条评论)
登录后参与讨论