i^2C
EEPROM i^2C
- 存关键参数
- pid控制参数
FLASH:spi接口 10mb/s
- 容量比较大
- 用作数据代码存储
- 先擦后写(擦->FFFFF)
I2C
串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;I2C总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步
通信过程
- 主机发送起始信号启用总线
- 主机发送一个字节数据指明从机地址和后续字节的传送方向
- 被寻址的从机发送应答信号回应主机
- 发送器发送一个字节数据
- 接收器发送应答信号回应发送器
- ........ (循环步骤4、5)
- 通信完成后主机发送停止信号释放总线
第4步和第5步用的是发送器和接收器,不是主机和从机,这是由第一个字节的最后一位决定主给从发,还是从给主发。
也就是说,第一个字节和最后的停止信号一定是主机发给从机,但中间就不一定了。
起始信号 高到低跳变
这次实验用GPIO模拟时序
AT 24C02
地址:0xA1 0xA0
用GPIO模拟I2C时序
myiic.c 文件存放 iic 驱动代码,24cxx.c 文件存放 24C02 驱动代码
iic
//²úÉúIICÆðʼÐźÅ
void IIC_Start(void)
{
SDA_OUT(); //sdaÏßÊä³ö
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;//START:when CLK is high,DATA change form high to low
delay_us(4);
IIC_SCL=0;//ǯסI2C×ÜÏߣ¬×¼±¸·¢ËÍ»ò½ÓÊÕÊý¾Ý
}
//²úÉúIICÍ£Ö¹ÐźÅ
void IIC_Stop(void)
{
SDA_OUT();//sdaÏßÊä³ö
IIC_SCL=0;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//·¢ËÍI2C×ÜÏß½áÊøÐźÅ
delay_us(4);
}
if(READ_SDA)receive++;//根据总线高低,来读
Comments | NOTHING