包头——指示数据包的开始,有利于包完整性检测,有时可省略 地址——数据包要传送的目标地址,若只有双机通信或硬件区分地址可以省略 包长度——指示整个数据包的长度 命令——指示本数据包的作用 参数——需要传送的数据与参数 校验——验证数据包的正确性,可以是和校验、异或校验、CRC校验等或者是它们的组合 包尾——指示数据包的结尾,有利于包完整性检测,有时可省略
简单:占用单片机口线少(SCL、SDA、握手线A、握手线B) 通用:软件模拟I2C主机方式,可以在任何种类的单片机之间通信 高效:由于采用数据缓冲,可以在不同时钟频率、不同速度的单片机之间通信;读写数据时,可以I2C总线的最高速度进行,可以实现1次传送大量数据;在一个单片机向FRAM传送数据时,另一个单片机无须一一作出响应或等待,可以进行其它程序操作,提高软件工作效率 灵活:通信硬件接口对于各个单片机是对等的,通过软件配置,每个单片机既可以根据需要主动发送通信,也可以只响应其它单片机的呼叫 容易扩展:通过增加地址识别线,修改通信协议,即可做到多机通信
为了提高通信效率,握手线B最好使用中断端口,负脉冲宽度一定要满足速度较低单片机中断信号要求。如果没有中断的话应增加1条口线,用改变端口状态的方法通知对方,等待对方查询,而不是负脉冲 向对方发送负脉冲时,应屏蔽自己的中断 由于参数与通信缓冲区同时设在同一片FRAM内,要避免对参数部分的误操作。一个较好的解决办法是把参数存放在地址的后半部分(A2=1),在进行通信操作时,把FRAM的WP引脚拉高(地址在后半部分的单元写保护),这样可以有效地防止测验时对参数区误操作 由于I2C总线在一个时间段内只有1个主机和1个从机,所以当1个单片机正在写通信数据时,另一个单片机是不能对FRAM进行操作的。如果需要实时、频繁地读取FRAM中参数的话,请预先将参数读入RAM单元使用或另外增加专门存放参数的芯片