//SCCB读取数据
u8 SCCB_ReadByte(u8 WriteAddress, u8* Data, u8 length)
{
Start();
Send_Byte(OV7725_ADDRESS);
if(Receive_ByteAck())
{
Stop();
return ERROR;
}
Send_Byte(WriteAddress);
Receive_ByteAck();
Stop();
Start();
//地址最后一位
Send_Byte(OV7725_ADDRESS | 0x01);
if(Receive_ByteAck())
{
Stop();
return ERROR;
}
while(length)
{
*Data = Receive_Byte();
//不给从机应答,从机不能继续发送数据
if(length == 1) Send_Byte(1);
else Send_Byte(0);
Data++;
length--;
Sccb_NA(); // NA信号
}
Stop();
return SUCCES;
}
一、 拼凑读时序时要先写入地址,记得写入后要stop一下(13行)
具体可以参考时序图线拉低SIO_D释放SIO_C释放SIO_D
(SIO_D和SIO_C因为都是上拉,释放意味升高电平)
二、sccb时序不支持连续读写,读的时候要加一个NA信号(倒数第五行)
NA信号
(看清楚和上一张图的区别)
红色的是NA绿色的和上一张绿色一样,都是停止信号
void Sccb_NA(void)
{
SDA_SET(1);
SCL_SET(1);
SCL_SET(0);
SDA_SET(0);
}
释放SIO_D,释放SIO_C,拉低SIO_C,拉低SIO_D