LV16-33-OV7725带FIFO模块-02-SCCB协议简介

本文主要是STM32开发——OV7725带FIFO模块 SCCB协议简介的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows windows11
Ubuntu Ubuntu16.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
SecureCRT Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日
开发板 正点原子 i.MX6ULL Linux阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
STM32开发板 正点原子战舰V3(STM32F103ZET6)
点击查看本文参考资料
  • 通用
分类 网址说明
官方网站https://www.arm.com/ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档
https://www.st.com/content/st_com/zh.htmlST官方网站,在这里我们可以找到STM32的相关文档
https://www.stmcu.com.cn/意法半导体ST中文官方网站,在这里我们可以找到STM32的相关中文参考文档
http://elm-chan.org/fsw/ff/00index_e.htmlFatFs文件系统官网
教程书籍《ARM Cortex-M3权威指南》ARM公司专家Joseph Yiu(姚文祥)的力作,中文翻译是NXP的宋岩
《ARM Cortex-M0权威指南》
《ARM Cortex-M3与Cortex-M4权威指南》
开发论坛http://47.111.11.73/forum.php开源电子网,正点原子的资料下载及问题讨论论坛
https://www.firebbs.cn/forum.php国内Kinetis开发板-野火/秉火(刘火良)主持的论坛,现也做STM32和i.MX RT
https://www.amobbs.com/index.php阿莫(莫进明)主持的论坛,号称国内最早最火的电子论坛,以交流Atmel AVR系列单片机起家,现已拓展到嵌入式全平台,其STM32系列帖子有70W+。
http://download.100ask.net/index.html韦东山嵌入式资料中心,有些STM32和linux的相关资料也可以来这里找。
博客参考http://www.openedv.com/开源网-原子哥个人博客
http://blog.chinaaet.com/jihceng0622博主是原Freescale现NXP的现场应用工程师
cortex-m-resources这其实并不算是一个博客,这是ARM公司专家Joseph Yiu收集整理的所有对开发者有用的官方Cortex-M资料链接(也包含极少数外部资源链接)
点击查看相关文件下载
分类 网址 说明
STM32相关 STM32F103xx英文数据手册 STM32F103xC/D/E系列的英文数据手册
STM32F103xx中文数据手册 STM32F103xC/D/E系列的中文数据手册
STM32F10xxx英文参考手册(RM0008) STM32F10xxx系列的英文参考手册
STM32F10xxx中文参考手册(RM0008) STM32F10xxx系列的中文参考手册
Arm Cortex-M3 处理器技术参考手册-英文版 Cortex-M3技术参考手册-英文版
STM32F10xxx Cortex-M3编程手册-英文版(PM0056) STM32F10xxx/20xxx/21xxx/L1xxxx系列Cortex-M3编程手册-英文版
STM32 HAL库开发实战 野火STM32开发教程在线文档——基于F103系列开发板
STM32库开发实战指南 野火STM32开发教程在线文档——基于野火霸道开发板
SD卡相关 SD卡相关资料——最新版本 有关SD卡的一些资料可以从这里下载
SD卡相关资料——历史版本 有关SD卡的一些历史版本资料可以从这里下载,比如后边看的SD卡2.0协议
SD 2.0 协议标准完整版 这是一篇关于SD卡2.0协议的中文文档,还是比较有参考价值的,可以一看
ESP32 SD卡相关资料——最新版本 这个⼿册介绍了 ESP8266EX 的产品参数。
ESP8266 系列入门教程 一个入门手册(安信可官网)
ESP8266 AT 指令集 这是一篇关于ESSP8266的AT指令集的文档(安信可官网)
ESP8266 AT 指令使用实例 这是一篇关于ESSP8266的AT指令集使用实例的文档(安信可官网)
ESP-AT 用户指南 本指南详细介绍 ESP-AT 是什么、如何连接硬件、以及如何下载和烧录 AT 固件(乐鑫官网)
乐鑫官方技术文档 这里是乐鑫官方技术文档的入口,文档都可以来这里找(乐鑫官网)

一、SCCB是什么?

SCCB(Serial Camera Control Bus,串行摄像头控制总线) 是 OmniVision 开发的一种总线协议, 且广泛被应用于 OV 系列图像传感器上。

SCCB 协议与 IIC 协议十分相似, SCCB协议由两条信号线组成: SIO_C(类似 IIC 协议的 SCL) 和 SIO_D(类似 IIC 协议的 SDA)。与 IIC 协议一样, SCCB 协议也有起始信号和停止信号, 只不过与 IIC 协议不同的是, IIC协议在传输完 1 字节数据后,需要传输的接收方发送 1 比特的确认位,而 SCCB 协议一次性要传输 9 位数据, 前 8 位为读写的数据位, 第 9 位在写周期为 Don’t-Care 位,在读周期为NA 位。 这样一次性传输的 9 个位,在 SCCB 协议中被定义为一个相(Phase)。

在 SCCB 协议中共包含了三种传输周期, 分别为 3 相写传输(三个相均由主机发出, 一般用于主机写从机寄存器, 三个相分别从设备地址、寄存器地址、 写入的数据)、 2 相写传输(两个相均由主机发出, 一般配合 2 相读传输用与主机读从机寄存器值,两个相分别为从设备地址、寄存器地址) 和 2 相读传输(第一个相由主机发出,第二个相由从机回应,一般配合 2 相写传输用于主机读从机寄存器值,两个相分别为从设备地址、 寄存器数据)。

关于 SCCB 协议的详细介绍,请见《OmniVision Technologies Seril Camera Control Bus(SCCB) Specification.pdf》。

二、SCCB协议

1. 写传输协议

image-20240114142346937

上图中就是三相写传输周期,第一个相就是 ID Address,由 7 位器件地址和 1 位读写控制位构成(0:写 1:读),而 OV7725 器件地址为0x21,所以在写传输时序中, ID Address(W)为0x42(器件地址左移 1 位,低位补 0);第二个相就是 Sub-address,即 8 位寄存器地址,在 OV7725的数据手册中定义了 0x00~0xAC 共 173 个寄存器,有些寄存器是可写的,有些是只读的,只有可写的寄存器才能正确写入;第三个相就是 Write Data,即要写入寄存器的 8 位配置数据。而上图中的第 9 位 X 表示 Don’t Care(不必关心位),该位是由从机(此处指 OV7725)发出应答信号来响应主机表示当前 ID Adress、 Sub-address 和 Write Data 是否传输完成,但是从机有可能不发出应答信号,因此主机(此处指STM32)可不用判断此处是否有应答,直接默认当前传输完成即可。

SCCB 和 IIC 写传输协议是极为相似,只是在 SCCB 写传输时序中,第 9 位为不必关心位,而 IIC 写传输协议中为应答位。 SCCB 的读传输时序和 IIC 有些差异,在 IIC 读传输协议中,写完寄存器地址后,会有一个 restart 即重复开始的操作;而 SCCB 读传输协议中没有重复开始的概念,在写完寄存器地址后,发起总线停止信号。

2. 读传输协议

image-20240114142440405

SCCB 读传输协议由两个部分组成: 二相写传输周期和二相读传输周期。跟 IIC 的读操作是相似的,都是复合的过程。第一部分是写器件地址和寄存器地址,即先进行一次虚写操作,通过这种虚写操作使地址指针向虚写操作中寄存器地址的位置。第二部分就是读器件地址和读数据,此时读取到的数据才是寄存器地址对应的数据,这里的读器件地址为 0x43(器件地址左移 1 位,低位补 1)。上图中的 NA 位是由主机(这里指 STM32)产生,由于 SCCB 总线不支持连续读写,因此 NA 位必须为高电平。