新手上路
- 积分
- 29
- 金钱
- 29
- 注册时间
- 2023-10-23
- 在线时间
- 9 小时
|
用正点原子领航者驱动6946摄像头,和5640区别就是没有晶振,然后我通过pll输出了24Mhz ,在vitis中修改了 SCCB_ID 为0x6c 然后跑历程,i2c和sda都设置了上拉,结果在sda上读到的数据都是0xff,有人知道这个问题吗这是代码
#include "../emio_sccb_cfg/emio_sccb_cfg.h"
#define SCCB_ID 0x6c //OV6946的ID
void sccb_write_reg16(u16 addr , u8 data)
{
sccb_start();
sccb_send_byte(SCCB_ID);
sccb_ack();
sccb_send_byte(addr >> 8);
sccb_ack();
sccb_send_byte(addr & 0x00FF);
sccb_ack();
sccb_send_byte(data);
sccb_ack();
sccb_stop();
}
u8 sccb_read_reg16(u16 addr )
{
u8 rxd;
sccb_start();
sccb_send_byte(SCCB_ID);
sccb_ack();
sccb_send_byte(addr >> 8);
sccb_ack();
sccb_send_byte(addr & 0x00FF);
sccb_ack();
sccb_stop();
sccb_start();
sccb_send_byte(SCCB_ID | 0x01);
sccb_ack();
rxd = sccb_rece_byte();
sccb_ack();
sccb_stop();
return rxd ;
}
u8 ov6946_init( void )
{
u16 cam_id = 0;
// 读OV6946摄像头ID
cam_id = sccb_read_reg16(0x300b); //LSB 0x4f
cam_id |= sccb_read_reg16(0x300a) << 8; //MSB 0x69 按位进行或运算
if(cam_id != 0x694f) //获取到正确的OV6946 ID
return 1;
|
|