不管是UART,I2C还是SPI,它们通讯时都需要使用2条或2条以上的数据线,但在某些情况下,数据线或者MCU的管脚是非常宝贵的,在某些对通讯速度要求不高的情况下能否只利用一条数据线实现通讯呢?答案是肯定的,而且在必要的情况下,这条数据线同时也是电源线,从而实现只利用GND和DATA两条连接线就实现电源供给和数据传输,即单总线(OneWire)通讯。 单总线系统一般由一个单总线主机和多个从器件构成,微处理器为主机,其它单总线设备为从机,可以实现一对多的通讯,也就是说每个外设都有唯一的地址,标准速度为15.4kbps。单总线在使用时需要1个上拉电阻保证总线空闲时为高电平,其具体的连接样例如下: 单总线的具体通信过程请参考相关标准文档,其本质就是在严格时序限定下的数据读取,具体描述如下: 单总线协议首先定义了复位脉冲、应答脉冲、写0、读0和读1时序等几种基本信号类型,所有的单总线命令序列(初始化,ROM命令,功能命令)都是由这些基本的信号类型组成的。在这些信号中,除了应答脉冲外,其它均由主机发出同步信号,并且发送的所有命令和数据都是字节的低位在前。各个基本信号的具体描述如下: l 复位脉冲:主机通过拉低单总线至少480μs产生Tx复位脉冲,然后由主机释放总线,并进入Rx接收模式; l 应答脉冲:主机释放总线时,会产生一由低电平跳变为高电平的上升沿,单总线器件检测到该上升沿后,延时15~60μs,接着单总线器件通过拉低总线60~240μsμ来产生应答脉冲; l 写信号:所有的读、写时序至少需要60μs,且每两个独立的时序之间至少需要1μs的恢复时间。写时序均始于主机拉低总线,若主机在拉低总线15μs之内释放总线,表示单总线器件写1;若主机拉低总线后能保持至少60μs的低电平,则表示向单总线器件写0; l 读信号:读时序也始于主机拉低总线,在主机发出读时序之后,单总线器件开始在总线上发送0或1。若单总线器件发送1,则总线保持高电平,若发送0,则拉低总线。由 单总线器件发送数据后可保持15μs有效时间,因此,主机在读时序期间必须释放总线,且须在15μs的采样总线状态,以便接收从机发送的数据。 下面是各个基本信号的时序图: 一般单总线设备的访问过程如下: 基于以上基本信号,单总线设备的访问过程如下: 1. 初始化:单总线上的所有传输操作均以初始化序列开始。初始化序列由总线主机发送的复位脉冲和随后从器件发送的一个在线应答脉冲组成。从器件发出的在线应答脉冲的作用是让主机知道从设备已经准备就绪。 2. 写入功能命令:一旦主机检测到从器件的应答脉冲,它就可以发出符合从设备格式的功能命令,通用命令有:READ,SEARCH,SKIP等,具体需要参考器件的datasheet。 3. 读取从设备发过来的数据:从设备在正常情况下不能主动发送数据,在主机的要求下才发送,这时主机就可以根据格式读取从设备发过来的数据了。
|