用软件模拟iic去模拟sccb,会发现接收时序有一点区别

文章详细描述了如何使用SCCB函数u8SCCB_ReadByte进行数据读取,包括地址写入后的停顿、SIO时序控制(包括释放SIO_D和SIO_C以及NA信号的插入),以及注意事项如不支持连续读写和NA信号的作用。
摘要由CSDN通过智能技术生成
//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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值