|
发表于 2012-4-17 11:49:18
|
显示全部楼层
请教一下(模拟I2C):
int I2C_FRAM_BufferWrite(u8* pBuffer, u16 WriteAddr, u16 NumByteToWrite) //写缓冲区 BOOL
{
u8 Addr = 0, count = 0;
Addr = WriteAddr / I2C_PageSize; // 取页地址 ?
count = WriteAddr % I2C_PageSize; // 取 地址 低 8 位
Addr = Addr << 1; // 这里 为什么要扩大2倍
Addr = Addr & 0x0F; // 为什么又要取低4位
FRAM_ADDRESS = I2C1_SLAVE_ADDRESS7 | Addr;
if (!I2C_Start()) return FALSE;
I2C_SendByte(FRAM_ADDRESS); //设置器件地址+段地址 怎么理解?
if (!I2C_WaitAck())
{
I2C_Stop();
return FALSE;
}
I2C_SendByte(count); //设置段内地址 这个是 写 FM24CL16片内内存地址吗
I2C_WaitAck();
while(NumByteToWrite--)
{
I2C_SendByte(* pBuffer);
I2C_WaitAck();
pBuffer++;
}
I2C_Stop();
//注意:因为这里要等待EEPROM写完,可以采用查询或延时方式(10ms)
//Systick_Delay_1ms(10);
I2C_delay_ms(10) ;
return TRUE;
}
帮下忙啊 代码一些不理解~~~~ 我在测试FM24CL64 不知道是不是 器件换了的原因! |
|