新手上路 
 
	- 积分
 - 30
 
        - 金钱
 - 30 
 
       - 注册时间
 - 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; 
 
 |   
 
 
 
 |