常用通信接口、協議:SCCB

一、概述

? ? ? ? SCCB(串行攝像頭控制總線)是由歐姆尼圖像技術公司(OmniVision)開發的一種類IIC的總線,主要用于其OV系列的圖像傳感器上(但目前有很多家的圖像傳感器都有采用該控制總線)。相對于IIC總線來說SCCB與之最主要的差異在于連續讀寫模式;SCCB不支持該模式,即每次讀寫完一個字節,主機必須發送一個NA信號。

? ? ? ? 采用了SCCB總線的圖像傳感器都工作在Slave模式,對應的主控端為Master模式,也就是說和IIC一樣的為主從模式的總線,同樣的支持一主多從和單主單從(通過SCCB_E控制從機使能,低電平使能)。

二、信號線定義

? ? ? ? 完整的SCCB總線包含:SCCB_E、SIO_C、SIO_D、PWDN四根信號線,其具體的作用分別為:

? ? ? ? SCCB_E:傳輸使能,主端輸出,從端輸入,默認空閑狀態為高電平。低電平時傳輸有效,電平高到低表示 總線通信開始,電平低到高表示 總線通信結束。

? ? ? ? SIO_C:數據傳輸時鐘,主端輸出,從端輸入,默認空閑狀態為高電平。在SCCB_E使能(拉低)傳輸開始后電平由高到低表示數據傳輸開始,數據傳輸過程中高電平期間SIO_D數據采樣有效,低電平期間SIO_D狀態切換。

? ? ? ? SIO_D:數據傳輸信號,雙向輸入、輸出,默認總線空閑為浮空電平(通常主端在空閑狀態會選擇將其拉高),高電平表示邏輯1(bit 1),低電平表示邏輯0(bit 0)。在總線通信開始,SCCB_E產生下降沿前,主機需要將SIO_D拉高,可以有效的避免總線出現未知錯誤。

? ? ? ? PWDN:輸出、輸入關閉。

三、通信過程

? ? ? ? SCCB的數據傳輸發生在通信開始信號(起始信號)和通信結束信號(結束信號)之間,由稱之為相(phase)的基礎傳輸單元組成。

? ? ? ? 通信開始(起始信號):通信開始時序由SCCB_E下降沿前后的各信號線的序列時序狀態組成;在SCCB_E下降沿前主端將SIO_D置1,并且SIO_D必須保持間隔一個不低于15ns的tPRC的高電平時間;在SCCB_E下降沿后SIO_D必須要保持間隔一個不低于1.25us的tPRA的高電平時間;在此期間,SIO_C必須始終保持在高電平狀態。

? ? ? ? 通信結束(結束信號):通信開始時序由SCCB_E上升沿前后的各信號線的序列時序狀態組成;在SCCB_E上升沿前SIO_C拉高,并且要保持間隔一個不低于0ns的tPSA時間;在SCCB_E上升沿后SIO_D拉低,并且期間要保持間隔一個不低于15ns的tPSC時間。

? ? ? ? SCCB的數據傳輸主要分為:3相寫、2相寫、2相讀,三種傳輸時序類型。這里的3相、2相的相指的是基礎傳輸單元。

? ? ? ? 每一個相元(phase)由8位數據位 + 1位 don’t care/NA位組成。如果是主端發數據(寫操作),第9位就是don’t care(不關心)位;如果是從端發數據(讀操作),第9位就是NA位。數據比特流都是MSB高比特在前的方式傳輸的。

? ? ? ? 相元1傳輸的主要是從機的ID信息,SCCB支持單主多從,所以主機需要在相元1階段發送從機ID信息,以便總線上的從機識別當前主機要與誰通信(單主單從時也不可省略)。從機ID為7bit,表示范圍為0~127,bit 0 用于表示讀/寫操作,0為讀取數據,1為寫入。在相元1的8位數據之后的x位為don’t care位(但有的sensor會在該位通過SIO_D向主端發送一個邏輯0的NA數據,主機端可以通過該位判斷對應ID的從機是否在線)。

? ? ? ? 相元2傳輸的主要是從機寄存地址信息或者讀取的數據信息;8bit后的1bit位也同樣的為don’t care/NA位。

? ? ? ? 相元3傳輸的主要是主機向從機寄存要寫入的數據信息;8bit后的1bit位也同樣的為don’t care/NA位。

? ? ? ? 3相寫時序:3相寫時序是一個完整的主機向指定從機的指定寄存地址寫入指定8bit數據的一個完整數據傳輸周期(相元1的bit0為1),每一個相元的第9bit都是don’t care位。

? ? ? ? 2相寫時序:2相寫時序實際上是前半個主機從指定從機的指定寄存地址讀取8bit數據的完整數據傳輸周期(和2相讀時序共同組成一個完整的讀時序),每一個相元的第9bit都是don’t care位。先向目標從機傳輸讀標志(相元1的bit0和相元2中的8bit寄存地址)。

? ? ? ? 2相讀時序:2相讀序實際上是后半個主機從指定從機的指定寄存地址讀取8bit數據的完整數據傳輸周期(和2相寫時序共同組成一個完整的讀時序))。第一個相元的第9bit都是don’t care位,第二個相元的第9bit為NA位(主端向從端發送的確認信號)。

四、偽代碼實現

//通信開始
void sccb_start(void)
{sccb_sda_out();sccb_sda_set(1);sccb_scl_set(1);delay_us(25);sccb_sda_set(0);delay_us(25);sccb_scl_set(0);delay_us(25);return;
}//通信結束
void sccb_stop(void)
{sccb_sda_out();sccb_sda_set(0);delay_us(25);sccb_scl_set(1);delay_us(25);sccb_sda_set(1);delay_us(25);return;
}//NA信號
void sccb_na(void)
{sccb_sda_out();delay_us(25);sccb_sda_set(1);sccb_scl_set(1);delay_us(25);sccb_scl_set(0);delay_us(25);sccb_sda_set(0);delay_us(25);return;
}//讀取1字節,返回讀取的數據
unsigned char sccb_read_byte(void)
{unsigned char byte = 0, index = 0;sccb_sda_in();for(index = 0; index < 8; index++) {delay_us(25);sccb_scl_set(1);byte = byte << 1;if(1 == sccb_read_sda()) {byte++;}delay_us(25);sccb_scl_set(0);}sccb_sda_out();return byte;
}//寫入1字節,寫入成功返回1,失敗返回0
unsigned char sccb_write_byte(unsigned char data)
{unsigned char res = 0, index = 0;for(index = 0; index < 8; inde++) {if(1 == (data & 0x80)) {sccb_sda_set(1);} else {sccb_sda_set(0);}data <<= 1;delay_us(25);sccb_scl_set(1);delay_us(25);sccb_scl_set(0);}sccb_sda_in();delay_us(25);sccb_scl_set(1);delay_us(25);if(1 == sccb_read_sda()) {res = 1;} else {res = 0;}sccb_scl_set(0);sccb_sda_out();return res;
}//向寄存器寫入1字節,寫入成功返回1,失敗返回0
unsigned char sccb_write_reg(unsigned char reg, unsigned char data)
{unsigned char res = 0;sccb_start();if(1 == sccb_write_byte(sccb_dev_id)) {res = 1;}delay_us(50);if(1 == sccb_write_byte(reg)) {res = 1;}delay_us(50);if(1 == sccb_write_byte(data)) {res = 1;}delay_us(50);sccb_stop();return res;
}//從寄存器讀取1字節
unsigned char sccb_read_reg(unsigned char reg)
{unsigned char res = 0;sccb_start();sccb_write_byte(sccb_dev_id);delay_us(50);sccb_write_byte(reg);delay_us(50);sccb_stop();sccb_start();sccb_write_byte(sccb_dev_id | 0x01);delay_us(50);res = sccb_read_byte();sccb_na();sccb_stop();return res;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161334.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161334.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java基礎-集合

1、集合 在java中&#xff0c;集合&#xff08;Collection&#xff09;指的是一組數據容器&#xff0c;它可以存儲多個對象&#xff0c;并且允許用戶通過一些方法來訪問與操作這些對象。j 集合的實現原理都基于數據結構和算法&#xff0c;如下&#xff1a; 數據結構&#xff1…

振南技術干貨集:制冷設備大型IoT監測項目研發紀實(2)

注解目錄 1.制冷設備的監測迫在眉睫 1.1 冷食的利潤貢獻 1.2 冷設監測系統的困難 &#xff08;制冷設備對于便利店為何如何重要&#xff1f;了解一下你所不知道的便利店和新零售行業。關于電力線載波通信的論戰。&#xff09; 2、電路設計 2.1 防護電路 2.1.1 強電防護 …

基于JavaWeb+SSM+Vue教學輔助微信小程序系統的設計和實現

基于JavaWebSSMVue教學輔助微信小程序系統的設計和實現 源碼獲取入口前言主要技術系統設計功能截圖Lun文目錄訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 前言 1.1 概述 隨著信息時代的快速發展&#xff0c;互聯網的優勢和普及&#xff0c;人們生活…

[項目管理-33/創業之路-87/管理者與領導者-127]:如何提升自己項目管理的能力和水平

目錄 前言&#xff1a; 一、項目經理的角色定位 1.1 項目經理的職責 1.2 不同矩陣類型的項目&#xff0c;項目經理的職責 1.3 項目經理的角色定位 1.4 項目經理的發展路徑 二、項目經理項目理論和知識結構 三、軟件項目經理在計算機水平的提升 四、項目經理業務知識的…

nodejs微信小程序+python+PHP-儲能電站運營管理系統的設計與實現-計算機畢業設計推薦

目 錄 摘 要 I ABSTRACT II 目 錄 II 第1章 緒論 1 1.1背景及意義 1 1.2 國內外研究概況 1 1.3 研究的內容 1 第2章 相關技術 3 2.1 nodejs簡介 4 2.2 express框架介紹 6 2.4 MySQL數據庫 4 第3章 系統分析 5 3.1 需求分析 5 3.2 系統可行性分析 5 3.2.1技術可行性&#xff1a;…

七、通過libfdk_aac編解碼器實現aac音頻和pcm的編解碼

前言 測試環境&#xff1a; ffmpeg的4.3.2自行編譯版本windows環境qt5.12 AAC編碼是MP3格式的后繼產品&#xff0c;通常在相同的比特率下可以獲得比MP3更高的聲音質量&#xff0c;是iPhone、iPod、iPad、iTunes的標準音頻格式。 AAC相較于MP3的改進包含&#xff1a; 更多的采…

【leetcode】209. 長度最小的子數組

209. 長度最小的子數組 - 力扣&#xff08;LeetCode&#xff09; 給定一個含有 n 個正整數的數組和一個正整數 target 。 找出該數組中滿足其總和大于等于 target 的長度最小的 連續子數組 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其長度。如果不存在符合條…

系列八、key是弱引用,gc垃圾回收時會影響ThreadLocal正常工作嗎

一、key是弱引用&#xff0c;gc垃圾回收時會影響ThreadLocal正常工作嗎 到這里&#xff0c;有些小伙伴可能有疑問&#xff0c;ThreadLocalMap的key既然是 弱引用&#xff0c;那么GC時會不會貿然地把key回收掉&#xff0c;進而影響ThreadLocal的正常使用呢&#xff1f;答案是不會…

HTML新手入門筆記整理:HTML基本標簽

結構標簽 <html> </html> 告訴瀏覽器這個頁面是從<html> 開始&#xff0c;到 </html>結束 <head> </head> 網頁的頭部&#xff0c;用于定義一些特殊內容&#xff0c;如頁面標題、定時刷新、外部文件等。 <body> </body> …

基于SSM的旅游管理系統設計與實現

末尾獲取源碼 開發語言&#xff1a;Java Java開發工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技術開發 數據庫&#xff1a;MySQL5.7和Navicat管理工具結合 服務器&#xff1a;Tomcat8.5 開發軟件&#xff1a;IDEA / Eclipse 是否Maven項目&#x…

大文件導出

關于大文件導出的優化迭代情況如下&#xff1a; 計算機配置&#xff1a;四核16G內存 初始版本為單線程單文件導出文件&#xff0c;mybatis讀 opencsv寫&#xff0c;耗時將近三小時&#xff1b; 第一輪優化改為多線程單文件&#xff0c;提高讀數據效率&#xff0c;時間僅縮減十分…

數據分析基礎之《matplotlib(1)—介紹》

一、什么是matplotlib 1、專門用于開發2D圖表&#xff08;包括3D圖表&#xff09; 2、使用起來及其簡單 3、以漸進、交互方式實現數據可視化 4、matplotlib mat&#xff1a;matrix&#xff08;矩陣&#xff09; plot&#xff1a;畫圖 lib&#xff1a;庫 二、為什么要學習m…

記錄一次因內存不足而導致hiveserver2和namenode進程宕機的排查

背景 最近發現集群主節點總有進程宕機&#xff0c;定位了大半天才找到原因&#xff0c;分享一下 排查過程 查詢hiveserver2和namenode日志&#xff0c;都是正常的&#xff0c;突然日志就不記錄了&#xff0c;直到我重啟之后又恢復工作了。 排查各種日志都是正常的&#xff0…

vue3 + vue-router + keep-alive緩存頁面

1.vue-router中增加mate.keepAlive和deepth屬性 {path: /,name: home,component: HomeView,meta: {// 當前頁面要不要緩存keepAlive: false,// 當前頁面層級deepth: 1,}},{path: /list,name: list,component: ListView,meta: {// 當前頁面要不要緩存keepAlive: true,// 當前頁…

代碼規范之-理解ESLint、Prettier、EditorConfig

前言 團隊多人協同開發項目&#xff0c;困擾團隊管理的一個很大的問題就是&#xff1a;無可避免地會出現每個開發者編碼習慣不同、代碼風格迥異&#xff0c;為了代碼高可用、可維護性&#xff0c;需要從項目管理上盡量統一和規范代碼。理想的方式需要在項目工程化方面&#xff…

Kafka官方生產者和消費者腳本簡單使用

問題 怎樣使用Kafka官方生產者和消費者腳本進行消費生產和消費?這里假設已經下載了kafka官方文件,并已經解壓. 生產者配置文件 producer_hr.properties bootstrap.servers10.xx.xx.xxx:9092,10.xx.xx.xxx:9092,10.xx.xx.xxx:9092 compression.typenone security.protocolS…

部署jekins遇到的問題

jdk問題 我用的jdk版本是21的結果版本太新了&#xff0c;啟動jekins服務的時候總是報錯最后在jekins的安裝目錄下面的jekinsErr.log查看日志發現是jdk問題最后換了一個17版本的就解決了。 unity和jekins jekins和Git源碼管理 jekins和Git聯動使用 我想讓jekins每次打包的時…

【css/vue】使用css變量,在同一個頁面根據不同情況改變字號等樣式

解決方法是&#xff1a;將 css 的屬性使用 v-bind 與 Vue 組件的屬性綁定&#xff0c;當組件的屬性變化時&#xff0c;css 對應的屬性值也就會隨之變化&#xff1b; 具體實現代碼&#xff1a; <template><div><span class"navTitle">標題名</s…

3D電路板在線渲染案例

從概念上講,這是有道理的,因為PCB印制電路板上的走線從一個連接到下一個連接的路線基本上是平面的。 然而,我們生活在一個 3 維世界中,能夠以這種方式可視化電路以及相應的組件,對于設計過程很有幫助。本文將介紹KiCad中基本的3D查看功能,以及如何使用NSDT 3DConvert在線…

Day38力扣打卡

打卡記錄 網格中的最小路徑代價&#xff08;動態規劃&#xff09; 鏈接 class Solution:def minPathCost(self, grid: List[List[int]], moveCost: List[List[int]]) -> int:m, n len(grid), len(grid[0])f [[0x3f3f3f3f3f] * n for _ in range(m)]f[0] grid[0]for i i…