当前位置:文档之家› IIC读写EEPROM

IIC读写EEPROM

i2c_Init.I2C_Mode = I2C_Mode_I2C;
i2c_Init.I2C_DutyCycle = I2C_DutyCycle_2;
i2c_Init.I2C_OwnAddress1 = I2C_EE_24C256_PARA;
i2c_Init.I2C_Ack = I2C_Ack_Enable;
* I2C_EE_Drv_WriteByte()
*
* Description :将一个字节的数据写入EEPROM的指定的地址
*字节写模式:
*
*起始信号
* ->从器件地址(包括写命令)
* [a]-> EEPROM存储空间地址高字节
* [a]-> EEPROM存储空间地址低字节
* [a]->数据
* [a]->停止信号
gpio_Init.GPIO_Speed = GPIO_Speed_10MHz;
gpio_Init.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出模式
GPIO_Init(I2C1_WP_Port, &gpio_Init);
//----------- I2C1 configuration ------------------
* Description :
*-------------------------------------------------------------------------------------------------------
*********************************************************************************************************
BSP_IntDis(BSP_INT_ID_I2C1_ER); //失能错误中断
I2C_EE_Drv_BusDis();
//-------------------------------------------
//超时时间计算(5ms超时)
//-------------------------------------------
if(err)
{
if(--retry == 0 ) //已经试了5次,写下一个数据
{
retry = 5;
pbuf++;
addr++;
len--;
}
}
else //顺利,写下一个数据
{
pbuf++;
addr++;
len--;
}
}
I2C_EE_Drv_BusDis(); //失能总线,写保护
}
/*
*********************************************************************************************************
*/
u8 I2C_EE_Drv_WriteByte(u8 xChip, u16 xAddr, u8 xDat)
{
u32 tmr;
u8 errcnt;
// _WriteEn(); //写使能
// I2C_Cmd(I2C1, ENABLE); //使能总线
errcnt = 0;
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
* Modified by :
* Modified date :
* Description :
*-------------------------------------------------------------------------------------------------------
u32 ulTimeOut_Time;
/*
*********************************************************************************************************
* I2C_EE_WriteStr()
*
* Description :将一个数据块写入EEPROM的指定的地址
*/
void I2C_EE_Drv_Init( u32 xI2C_EE_Speed )
{
I2C_InitTypeDef i2c_Init;
GPIO_InitTypeDef gpio_Init;
RCC_ClocksTypeDef rcc_clocks;
//
BSP_PeriphEn(I2C1_PORT_ID);
* I2C_EE_Drv_Init()
*
* Description : I2C1初始化,默认情况下,I2C接口工作在从模式下。
*
* Argument(s) : xI2C_EE_Speed -总显的速度100000 - 400000
*
* Return(s) : none.
*
* Caller(s) : Application.
* Description :
*-------------------------------------------------------------------------------------------------------
*********************************************************************************************************
*
* Note(s) : (1)
*-------------------------------------------------------------------------------------------------------
* Modified by :
* Modified date :
RCC_GetClocksFreq(&rcc_clocks);
ulTimeOut_Time = (rcc_clocks.SYSCLK_Frequency /10 *5 /1000); //等待程序的执行时间:10个指令周期
}
/*
*********************************************************************************************************
*********************************************************************************************************
*/
void I2C_EE_WriteStr(u8 xChip, u16 xAddr, u8 *xpBuf, u16 xLen)
*/
void I2C_EE_ReadStr(u8 xChip, u16 xAddr, u8 *xpBuf, u16 xLen)
{
u8 *pbuf;
u8 err;
u8 retry;
u16 addr;
u16 len;
//
pbuf = xpBuf;
addr = xAddr;
len = xLen;
I2C_EE_Drv_BusEn(); //允许总线,写允许
* Modified date :
* Description :
*-------------------------------------------------------------------------------------------------------
*********************************************************************************************************
*
* Argument(s) : xChip -从器件地址
* xAddr - EEPROM存储空间地址
* xpBuf -数据缓冲区指针
* xLen -数据长度
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : (1)
*-------------------------------------------------------------------------------------------------------
* I2C_EE_ReadStr()
*
* Description :从EEPROM的指定的地址读出一个数据块
*
* Argument(s) : xChip -从器件地址
* xAddr - EEPROM存储空间地址
* xpBuf -数据缓冲区指针
* xLen -数据长度
*
* Return(s) : none.
i2c_Init.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
i2c_Init.I2C_ClockSpeed = xI2C_EE_Speed;
I2C_Init(I2C1, &i2c_Init);
BSP_IntDis(BSP_INT_ID_I2C1_EV); //失能事件中断
gpio_Init.GPIO_Speed = GPIO_Speed_50MHz;
相关主题