野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9947|回复: 8

关于摄像头的sccb问题

[复制链接]
发表于 2016-3-15 09:00:58 | 显示全部楼层 |阅读模式
各位大神。自己写的一个sccb测试设备id的程序能识别7725的id,不能识别7670、2640的id,这是啥问题???
回复

使用道具 举报

发表于 2016-3-15 09:03:20 | 显示全部楼层
你把id号读回来,打印出来看看,不同摄像头的id是在不一样的寄存器的
回复 支持 反对

使用道具 举报

发表于 2016-3-15 09:16:56 | 显示全部楼层
不同设备读取寄存器不一样啊亲,看看手册要读哪个寄存器啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-15 09:29:24 | 显示全部楼层
flyleaf 发表于 2016-3-15 09:03
你把id号读回来,打印出来看看,不同摄像头的id是在不一样的寄存器的

额。。我是从0~0xfe测试的。。。能检测出7725的,其他两个不行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-15 09:36:49 | 显示全部楼层
  1. <blockquote><div class="blockcode"><blockquote>//初始化SCCB接口
  2. void SCCB_Init(void)
  3. {                                                
  4.          GPIO_InitTypeDef  GPIO_InitStructure;
  5.         
  6.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);         //使能PD,PG端口时钟
  7.         
  8.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                                 // 端口配置
  9.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;                  //输入
  10.          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  11.          GPIO_Init(GPIOC, &GPIO_InitStructure);
  12.          GPIO_SetBits(GPIOC,GPIO_Pin_6);                                                 // 输出高

  13.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                                 // 端口配置
  14.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                  //输输出
  15.          GPIO_Init(GPIOC, &GPIO_InitStructure);
  16.          GPIO_SetBits(GPIOC,GPIO_Pin_7);                                                 // 输出高
  17.         
  18.         SCCB_SDA_OUT();           
  19. }                        

  20. //SCCB起始信号
  21. //当时钟为高的时候,数据线的高到低,为SCCB起始信号
  22. //在激活状态下,SDA和SCL均为低电平
  23. void SCCB_Start(int delaytime)
  24. {
  25.     SCCB_SDA=1;     //数据线高电平           
  26.     SCCB_SCL=1;            //在时钟线高的时候数据线由高至低
  27.     delay_us(delaytime);  
  28.     SCCB_SDA=0;
  29.     delay_us(delaytime);         
  30.     SCCB_SCL=0;            //数据线恢复低电平,单操作函数必要         
  31.         delay_us(delaytime);        
  32. }

  33. //SCCB停止信号
  34. //当时钟为高的时候,数据线的低到高,为SCCB停止信号
  35. //空闲状况下,SDA,SCL均为高电平
  36. void SCCB_Stop(int delaytime)
  37. {
  38.     SCCB_SDA=0;
  39.     delay_us(delaytime);         
  40.     SCCB_SCL=1;        
  41.     delay_us(delaytime);
  42.     SCCB_SDA=1;        
  43.     delay_us(delaytime);
  44. }  

  45. //SCCB,写入一个字节
  46. //返回值:0,成功;1,失败.
  47. u8 SCCB_WR_Byte(u8 dat, int delaytime)
  48. {
  49.         u8 j,res;         
  50.         for(j=0;j<8;j++) //循环8次发送数据
  51.         {
  52.                 if(dat&0x80)SCCB_SDA=1;        
  53.                 else SCCB_SDA=0;
  54.                 dat<<=1;
  55.                 delay_us(delaytime);
  56.                 SCCB_SCL=1;        
  57.                 delay_us(delaytime);
  58.                 SCCB_SCL=0;
  59.                 delay_us(delaytime);               
  60.         }
  61.         delay_us(delaytime);
  62.         SCCB_SDA=1;        
  63.         delay_us(delaytime);
  64.         SCCB_SDA_IN();                //设置SDA为输入
  65.         delay_us(delaytime);
  66.         SCCB_SCL=1;                        //接收第九位,以判断是否发送成功
  67.         delay_us(delaytime * 10);
  68.         if(SCCB_READ_SDA)res=1;  //SDA=1发送失败,返回1
  69.         else res=0;         //SDA=0发送成功,返回0
  70.         SCCB_SCL=0;        
  71.         delay_us(delaytime);        
  72.         SCCB_SDA_OUT();                //设置SDA为输出   
  73.         return res;  
  74. }         

  75. u8 SCCB_CheckDriver(u16 DEV_ADR, int delaytime)
  76. {
  77.         u8 reg;
  78.         SCCB_Start(delaytime);
  79.         if(SCCB_WR_Byte(DEV_ADR, delaytime) == 1)
  80.                 reg = 0;//失败返回0
  81.         else
  82.                 reg = 1;//成功返回1
  83.         
  84.         SCCB_Stop(delaytime);
  85.         return reg;
  86. }
复制代码

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-15 09:39:21 | 显示全部楼层
scl是pc6。sda是pc7
回复 支持 反对

使用道具 举报

发表于 2016-3-15 10:42:02 | 显示全部楼层
ls3050 发表于 2016-3-15 09:39
scl是pc6。sda是pc7

我们2640不是有例程嘛
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-15 15:14:03 | 显示全部楼层
fire 发表于 2016-3-15 10:42
我们2640不是有例程嘛

额。。我现在只是接了两条线用于驱动摄像头,但是只是能驱动7725。为啥7670和2640都驱动不了。。。
回复 支持 反对

使用道具 举报

发表于 2016-3-15 15:16:05 | 显示全部楼层
ls3050 发表于 2016-3-15 15:14
额。。我现在只是接了两条线用于驱动摄像头,但是只是能驱动7725。为啥7670和2640都驱动不了。。。

帮顶                  
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-22 04:04 , Processed in 0.049450 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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