OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 328|回复: 1

[XILINX] 领航者驱动sensor sccb值为0xff

[复制链接]

4

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2023-10-23
在线时间
9 小时
发表于 2024-6-7 13:45:49 | 显示全部楼层 |阅读模式
用正点原子领航者驱动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;

企业微信截图_17177389452511.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

205

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1322
金钱
1322
注册时间
2015-3-3
在线时间
127 小时
发表于 2024-6-13 09:28:21 | 显示全部楼层

回帖奖励 +10 金钱

IIC的SCL和SDA必须外部加上拉电阻,至少5.1K,最大不操作100K,这样IIC才能正常使用,要不然数据确实会飘。程序中设置的上拉是不起作用的,拉的效果不是很明显,内部是弱上拉,容易手干扰,尤其是频率高的时候。
海纳百川者,荣耀伴一生!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 13:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表