1、I2CIIC 本身是为板级通讯设计,没有考虑远距离通讯.UART 通讯编程简单,通讯速度远比 IIC快,可以直接使用 RS485延伸通讯距离达到1km,通讯速度很容易做高。UART 是一个并行输入成为串行输出的芯片.有一点要注意的是,它提供了 RS-232C 数据终端设备接口,这样计算机就可以和调制解调器或其它使用 RS-232C 接口的串行设备通信.I2C(InterIntegrated Circuit)总线是由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装
2、形式小,通信速率较高等优点。发送器:发送数据到总线的器件; 接收器:从总线接收数据的器件; 主机:初始化发送产生时钟信号和终止发送的器件; 从机:被主机寻址的器件; 多主机:同时有多于一个主机尝试控制总线但不破坏传输; 仲裁:是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使传输不被破坏 的过程; 同步:两个或多个器件同步时钟信号的过程 。 两条总线线路:一条串行数据线 SDA,一条串行时钟线 SCL;SDA 线上的数据必须在时钟的高电平周期保持稳定。数据线的高或低电平状态只 有在 SCL 线的时钟信号是低电平时才能改变。SCL 线是高电平时,SDA 线从高电平向低电平切换,这个情
3、况表示起始条件; SCL 线是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件。发送到 SDA 线上的每个字节必须为8 位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB) ,如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线 SCL 保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线 SCL 后数据传输继续。数据传输必须带响应,相关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间发送器释放 SDA 线(高) 。在响应的时钟脉冲期间,接收器必须将 SDA
4、 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。写 操 作 写 操 作 分 为 字 节 写 和 页 面 写 两 种 操 作 , 对 于 页 面 写 根 据 芯 片 的 一 次 装 载 的 字 节 不 同有 所 不 同 。 读 操 作 读 操 作 有 三 种 基 本 操 作 : 当 前 地 址 读 、 随 机 读 和 顺 序 读 。 图 4 给 出 的 是 顺 序 读 的时 序 图 。 应 当 注 意 的 是 : 最 后 一 个 读 操 作 的 第 9 个 时 钟 周 期 不 是 “不 关 心 ”。 为 了 结 束读 操 作 , 主 机 必 须 在 第 9 个 周 期 间 发 出 停
5、止 条 件 或 者 在 第 9 个 时 钟 周 期 内 保 持 SDA为 高 电 平 、 然 后 发 出 停 止 条 件 。 I2C 的 读 操 作 与 写 操 作 :I2C 与 UART 不 同 的 地 方 首 先 在 于 先 传 高 位 , 后 传 送 低 位 。主 机 写 数 据 时 , 每 发 送 一 个 字 节 , 接 收 机 需 要 回 复 一 个 应 答 位 “0”, 通 过 应 答位 来 判 断 从 机 是 否 接 收 成 功 。主 机 读 数 据 时 , 接 收 一 个 字 节 结 束 后 , 主 机 也 需 要 发 送 一 应 答 位 “0”, 但 是 当接 收 最 后 一
6、 个 字 节 结 束 后 , 则 需 发 送 一 个 非 应 答 位 “1”, 发 完 了 1 后 , 再 发 一 个 停止 信 号 , 最 终 结 束 通 信 。I2C 写 数 据 流 程首 先 I2C 起 始 信 号 , 然 后 发 送 首 字 节 , 即 器 件 ( EEPROM)地 址 。 并 且 在 读 写 方向 位 上 选 择 “写 操 作 ”方 向 。 (0xa0)第 二 个 字 节 , 发 送 数 据 的 存 储 地 址 , 就 是 要 读 取 的 数 据 所 存 储 在 EEPROM 中 的位 置 。第 三 个 字 节 , 发 送 要 存 储 的 数 据 第 一 个 字 节
7、, 第 二 个 字 节 注 意 : 在 写 数 据 的 过 程 中 , 都 要 等 待 EEPROM 返 回 一 个 “应 答 位 ”。write_eeprom:void write_e2prom(uint8 addr,uint8 databyte) I2CStart();I2CSend(0xa0); /起 始 信 号 后 写 入 器 件 地 址 , 写 操 作I2CSend(addr); /写 入 发 送 数 据 的 存 储 地 址I2CSend(databyte) /发 送 存 储 的 数 据I2CStop;void I2CSend(uint8 byte) uint8 mask=0x80;
8、 /数 据 由 高 位 依 次 传 输int i;for(i=0;i=1;Delay(); /SDA 延 迟 一 个 高 电 平SCL=1; /下 一 个 时 序 ,Delay(); /SCL 延 迟 一 个 低 电 平 , 保 证 时 序 的 完 整 性/一 个 字 节 的 数 据 传 输 完 成 之 后 , 要 等 待 应 答 位SCL=0; /接 着 上 一 个 时 序 , 保 证 完 整 性SDA=1; /主 机 释 放 SDA,拉 高 SDA,观 察 应 答 位Delay(); /延 迟 一 个 时 序 , 等 待 应 答 位j=SDA; /取 出 从 机 返 回 的 应 答 位 进
9、 行 判 断 , 低 电 平 的 时 候 有 效Delay(); /延 迟 一 个 时 序SCL=1; /拉 高 SCL,等 待 下 次 传 输UART 通信UART 是一种通用串行数据总线,用于 异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART 用来与 PC 进行通信,包括与监控调试器和其它器件,如 EEPROM 通信。UART 首先将接收到的并行数据转换成串行数据来传输。消息帧从一个低位起始位开始,后面是58 个数据位,一个可用的奇偶位和一个或几个高位停止位。接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。如果选择了奇偶,UART 就在数据位
10、后面加上奇偶位。奇偶位可用来帮助错误校验。 在接收过程中,UART 从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转换成并行。UART 也产生额外的信号来指示发送和接收的状态。例如,如果产生一个奇偶错误,UART 就置位奇偶标志。异步串口通信协议作为 UART 的一种,工作原理是将传输数据的每个字符一位接一位地传输。 其中各位的意义如下: 起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用 ASCII 码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使
11、得“1”的位数应为偶数 (偶校验)或奇数(奇校验) ,以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。 波特率:是衡量资料传送速率的指针。表示每秒钟传送的二进制位数。例如资料传送速率为120字符/秒,而每一个字符为 10位,则其传送的波特率为10120=1200 位/秒=1200波特。