一种基于改进I2C接口方式的MCU间通讯协议 技术领域
本发明涉及一种基于改进I2C接口方式的两个MCU间的通讯协议。
背景技术
现有的I2C通讯协议广泛使用于消费电子设备中,但该种通讯方式中一般只有主控方为MCU,其他均为被动器件。在现有系统中,当需要在两个以上设备之间或设备中进行两个MCU之间的信息传递时,一种方式是,使用现有的I2C协议,由于消费电子设备MCU信息处理能力有限,只能传送单字节或少数几个字节的信息,而在传送多字节信息时,由于MCU软件系统中的其他中断处理进程(如:红外遥控、定时器、OSD、出错处理等)会干扰I2C通讯进程,导致I2C通讯不稳定,无法完成多字节信息的传送;另外一种方式是,使用电平信息进行状态信息的交换,但这种方式不仅占用了宝贵的MCU I/O端口资源,而且可以进行传递的信息状态有限,在比较复杂的系统中,使用I/O端口的信息传输方式会占用很多的MCU查询时间,实现困难,而且系统的可靠性低,导致功能实现受到极大的限制,而且成本较高。
发明内容
为了克服现有技术在两个MCU之间进行信息传递时的不足,本发明提供一种基于改进I2C接口方式的通讯协议及信息编码协议,用于使用两个MCU地电子设备或多个电子设备之间进行通讯控制。
为实现上述目的,本发明采取以下技术方案。
改进的I2C接口方式为,在主控MCU 110和从控MCU 111之间的I2C通讯方式基础上,增加由从控MCU 111发送给主控MCU 110的STROBE信号。STROBE信号也可以由主控MCU110发送给从控MCU 111。
信息编码方式和通讯协议为:将MCU需要传送的信息进行编码,数据包由三个部分构成:
(a).地址码:主控MCU 110和从控MCU 111必须定义各自的地址码;
(b).数据包类型:定义在后面的字节中传送数据参数类型;
(c).参数值:参数值字节长度根据数据包的类型而定(可预先定义),通讯的双方可以根据预先定义的数据包编码,由接收到的数据包类型码而得知需要的参数。
本发明的有益效果是使两个MCU之间可以完成多字节的信息传递,设计出来的电子产品和系统能够具备比较复杂和完善的功能,具有较好的用户界面和功能、完备的系统整体性并易于操作,可靠性高。
附图说明
图1是本发明改进的I2C接口示意图;
图2是本发明数据通讯的数据包编码格式示意图;
图3是本发明I2C数据传送方式示意图;
图4是本发明一个实施例数据通讯的数据包编码格式示意图。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
图1是本发明改进的I2C接口示意图。在主控MCU 110和从控MCU 111之间的I2C接口,即时钟信号CLOCK、数据信号DATA外,还增加了由从控MCU 111发送给主控MCU 110的STROBE触发信号。
图2是本发明数据通讯的数据包编码格式示意图。预先定义每个数据包的编码方式,数据包由三个部分构成:1字节为I2C地址,2字节为数据包类型,3到n字节为参数值。
图3是本发明I2C数据传送方式示意图。由从控MCU 111发送给主控MCU 110的STROHE信号电平翻转,表示I2C通讯总线能否进行通讯,以避免接收方MCU未读取上一个传送数据时,I2C总线进行下一个数据的传送,从而将数据接收缓冲器中保存的上一个来读取传送数据覆盖。因此,主控MCU根据检测到的STROBE信号电平变化情况,进行发送或读取信息字节数据,保证I2C通讯的多字节信息传输的完成。
图4是本发明一个实施例数据通讯的数据包编码格式示意图。下面具体说明由主控MCU 110向从控MCU 111传送这个数据包的过程。
(a).定义两个MCU的I2C地址,主控MCU 110地址为87H,从控MCU地址为88H;
(b).数据包编码:
1字节;从控MCU地址为88H;
2字节:图象菜单数据包类型编码为01H;
3字节:对比度参数值;
4字节:亮度参数值;
5字节;色度参数值;
6字节:清晰度参数值。
该数据包长度为6个字节,根据事先定义,从数据包类型01H就可以得知该数据包传送的参数是对比度、亮度、色度、清晰度的数值;
(c).在通讯开始时,主控MCU 110查询STROBE线电平,若为高,则可以通讯,主控MCU 110传送第一个字节;从控MCU 111的I2C地址88H;
(d).从控MCU 111接收处理完第一个字节后,将STROBE电平翻转,主控MCU 110检测到STROBE电平翻转后传送第二个字节数据;从控MCU 111接收处理完第二个字节后,将STROBE电平翻转,主控MCU 110检测到STROBE电平翻转后,可以传送第三个字节数据,依次传送余下的字节数据;
(e).结束条件:在传送完一个数据包的数据后,主控MCU 110发送I2C STOP条件,从控MCU 111保持STROBE为低电平指定时间周期后(以便进行接收数据包的处理),释放STROBE电平为高,以便可以进行下一个数据包的传送。
对于主控MCU 110读取从控MCU 111数据的情况,如上类似,将发送操作改为读取操作。