本帖最后由 szopenmcu 于 2015-4-23 14:06 编辑
第十二章 金龙107——24C02(IIC_ EEPROM)
12.1 IIC简介:
(Inter -Integrated Circuit)总线是一种由NXP (原PHILIPS )公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,传输速率在标准模式下可达100kbps,快速模式下可达 400kbps 。 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。 开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。 结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。 CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号, CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。 这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。 掌握的协议层才是掌握总线的关键,至于物理层在上文已有简单介绍。 1) 数据的有效性 在时钟高电平期间,SDA线上的数据必须保持稳定,数据线仅可在SCL为低电平时改变。 2) 起始和结束条件 当SCL为高电平时,SDA上由高到低跳变被定义为起始条件; 当SCL为高电平时,SDA上由低到高跳变被定义为结束条件,总线在起始条件之后被视为忙状态,在停止条件之后被视为空闲状态。 3) 应答 每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号以确认从机是否接受到数据。从机应答主机所需的时钟仍是主机提供。
12.2实验说明: 本节进行的实验设计是用STM32F107VC与24C02以file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps376.tmp.png通信方式进行读写操作,并通过串口 在本实验中,主要跳线帽: JP10,JP11,JP4和JP7都接在2-3上, 12.3硬件说明: AT24C02是带有I2C总线接口的E2PROM存储器,具有掉电**的功能,并且可以象普通RAM一样用程序改写。它的容量是256个字节(00h~0ffh),有A2、A1、A0三位地址,可见I2C总线上可以连接8片AT24C02,它的寻址字节是1010 A2A1A0 R/W。下图是金龙107板上24C02的电路连接: 12.4程序说明: 本实验的重点在于IIC的配置,我们要用到IIC,那肯定要对它进行相应的初始化,主要在这个I2C_ee.c文件里。 IIC的初始化 编写相关初始化函数之后,然后要编写eeprom读写操作的函数。这里用到了两个读写的函数void I2C_EE_BufferWrite(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite),void I2C_EE_BufferRead(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead)。 第一个入口参数是指针* pBuffer,指向包含被写入到EEPROM中的数据的缓冲区,第二个是你要写/读的地址,最后一个是要写/读的字节数。 12.5实验现象:下载程序,复位运行,连接上串口线至J3,设置好串口调试助手,注意JP6要短接才能正常通讯。
|