lv11 嵌入式開發 IIC(下) 20

目錄

1 Exynos4412下IIC控制器介紹

1.1 總覽

1.2?特征

1.3 工作框圖

1.4?其他內容介紹

1.5 四種工作模式寄存器流程

2 IIC寄存器詳解

2.1 概述

2.2 控制寄存器

2.3 狀態寄存器

2.4 地址寄存器

2.5 數據寄存器

2.6 其他寄存器

3 MPU06050

3.1 簡介

3.2 MPU6050主要參數

3.3?MPU6050通信接口

3.4 6050芯片手冊

3.4.1 概覽(8位寄存器)

3.4.2 實驗需要用到的寄存器

4 MPU6050寄存器讀寫時序

4.1?向MPU6050的一個寄存器寫一個字節的數據

4.2 從MPU6050的一個寄存器讀一個字節的數據

1 Exynos4412下IIC控制器介紹

1.1 總覽

Exynos 4412 SCP是一款支持四個多主I2C總線串行接口的精簡指令集計算機(RISC)微處理器。為了在總線主和外圍設備之間傳輸信息,使用了專用的串行數據線(SDA)和串行時鐘(SCL)。SDA和SCL線都是雙向的。

在多主I2C總線模式下,多個Exynos 4412 SCP RISC微處理器接收或發送串行數據到或從從設備。主Exynos 4412 SCP啟動和終止I2C總線上的數據傳輸。 Exynos 4412 SCP的I2C總線使用標準的I2C總線仲裁過程實現多主和多從傳輸。

要控制多主I2C總線操作,必須向以下寄存器寫入值:

? 多主I2C總線控制寄存器-I2CCON

? 多主I2C總線控制/狀態寄存器-I2CSTAT

? 多主I2C總線Tx / Rx數據移位寄存器-I2CDS

? 多主I2C總線地址寄存器-I2CADD

如果I2C總線處于空閑狀態,則SDA和SCL線都應處于高電平。 SDA的高至低轉換會引發起始條件。 SDA的低至高轉換會引發停止條件,而SCL保持穩定在高電平。

主設備始終生成起始和停止條件。在啟動條件被初始化后,數據字節中的前7位地址值通過SDA線傳輸。該地址值確定了總線主設備選擇的從設備。第8位確定傳輸的方向(讀或寫)。

放置在SDA線上的每個數據字節應為8位。在總線傳輸操作期間,發送或接收字節的數量沒有限制。 I2C主設備和從設備始終從最高有效位(MSB)開始發送數據,然后立即跟隨每個ACK位。

1.2?特征

I2C總線接口的特點包括:

? 9個通道的多主、從I2C總線接口(其中8個通道用于通用目的,1個通道專用于高清晰度多媒體接口(HDMI))。

? 7位尋址模式 ? 串行、8位導向和雙向數據傳輸

? 在標準模式下支持最高100 kbit/s的速率

? 在快速模式下支持最高400 kbit/s的速率

? 支持主設備發送、主設備接收、從設備發送和從設備接收操作

? 支持中斷或輪詢事件

當IIC發送完或者接收到一個字節數據,會以中斷方式告知。

1.3 工作框圖

1.4?其他內容介紹

四種工作模式及操作細節

?起始結束信號

?一個字節數據傳輸

應答信號

?讀寫

多主機仲裁機制

仲裁發生在SDA線上,以防止兩個主設備之間的總線沖突。如果一個具有SDA高電平的主設備檢測到另一個具有SDA低電平的主設備,則不會啟動數據傳輸。這是因為總線上的電平不符合發起數據傳輸的條件。仲裁過程將一直進行,直到SDA線變為高電平。 當兩個或多個主設備同時將SDA線置為低電平時,每個主設備都會評估自己是否具有主設備的資格。為了進行評估,每個主設備都會檢測地址位。當每個主設備生成從設備地址時,它會檢測SDA線上的地址位。這是因為SDA線變為低電平而不是高電平。 假設一個主設備生成低電平作為第一個地址位,而另一個主設備維持高電平。在這種情況下,兩個主設備都會檢測到總線上的低電平。這是因為低電平在電源中優于高電平。當發生這種情況時,生成低電平作為第一個地址位的主設備獲得主設備的資格,而生成高電平作為第一個地址位的主設備則放棄主設備的資格。 當兩個主設備都將第一個地址位生成為低電平時,再次進行第二個地址位的仲裁。這個仲裁過程會一直持續到最后一個地址位。?

1.5 四種工作模式寄存器流程

2 IIC寄存器詳解

2.1 概述

2.2 控制寄存器

[7]位:應答信號,設置為接收模式時有用,收到字節會應答,發送模式時沒有意義
[6]位:時鐘源選擇
[5]位:收到數據、發送數據后可以產生中斷信號
[4]位:顯示中斷狀態,建立在第5位的基礎上,寫0清除置位
[3:0]位:發送時鐘的值

2.3 狀態寄存器

[7:6]位:模式選擇
[5]位:對于主機來說 1產生起始信號、0產生停止信號
對于從機來說 置1 繁忙,0 空閑
[4]位:收發開關
[3:0]位:狀態

2.4 地址寄存器

作為從機才有用

?

2.5 數據寄存器

2.6 其他寄存器

不常用

此濾波器可防止兩個PCLK時鐘之間的毛刺引起的錯誤。

3 MPU06050

3.1 簡介

MPU6050是一個運動處理傳感器,其內部集成了3軸加速度傳感器 ? ? 和3軸陀螺儀(角速度傳感器),以及一個可擴展數字運動處理器

3.2 MPU6050主要參數

可測量X、Y、Z軸三個方向的角速度 ? ?

可編程設置角速度測量范圍為±250、±500、±1000、±2000°/sec ? ?

可測量X、Y、Z軸三個方向的加速度 ? ?

可編程設置加速度測量范圍為±2g、±4g、±8g、±16g ? ?

可編程設置低功耗模式 ? ?

可編程設置采樣頻率

3.3?MPU6050通信接口

MPU6050可以使用IIC總線和其他器件進行數據交互,我們可以使用IIC總線向MPU6050中的控制寄存器寫入數據來設置MPU6050的工作參數 也可以使用IIC總線從MPU6050中的數據寄存器讀取數據來獲取加速度、角速度等信息

3.4 6050芯片手冊

datasheet重點關注這個時序

寄存器

3.4.1 概覽(8位寄存器)

3.4.2 實驗需要用到的寄存器


/****************MPU6050內部常用寄存器地址****************/#define	SMPLRT_DIV		0x19	//陀螺儀采樣率,典型值:0x07(125Hz)
#define	CONFIG			0x1A	//低通濾波頻率,典型值:0x06(5Hz)
#define	GYRO_CONFIG		0x1B	//陀螺儀自檢及測量范圍,典型值:0x18(不自檢,2000°/s)
#define	ACCEL_CONFIG	0x1C	//加速計自檢及測量范圍及高通濾波頻率,典型值:0x0(不自檢,2G,5Hz)
#define	ACCEL_XOUT_H	0x3B
#define	ACCEL_XOUT_L	0x3C
#define	ACCEL_YOUT_H	0x3D
#define	ACCEL_YOUT_L	0x3E
#define	ACCEL_ZOUT_H	0x3F
#define	ACCEL_ZOUT_L	0x40
#define	TEMP_OUT_H		0x41
#define	TEMP_OUT_L		0x42
#define	GYRO_XOUT_H		0x43
#define	GYRO_XOUT_L		0x44
#define	GYRO_YOUT_H		0x45
#define	GYRO_YOUT_L		0x46
#define	GYRO_ZOUT_H		0x47
#define	GYRO_ZOUT_L		0x48
#define	PWR_MGMT_1		0x6B	//電源管理,典型值:0x00(正常啟用)
#define	SlaveAddress	0x68	//MPU6050-I2C地址

上面設定了典型值,詳細介紹參考手冊

加速度和角速度都有正負,數據存放在2個寄存器,需要分別讀取合并成16位。

?

加速度正負參考

從機地址(注意要地址需要根據ADO引腳確定,我們開發板即0x68,怕地址沖突)

4 MPU6050寄存器讀寫時序

4.1?向MPU6050的一個寄存器寫一個字節的數據

1.主機(Exynos4412)發送起始信號

2.主機發送從機地址(MPU6050的地址)及讀寫方向(寫)

3.從機(MPU6050)發送應答信號

4.主機發送一個字節數據(要寫的寄存器的地址)

5.從機發送應答信號

6.主機發送一個字節數據(要寫到寄存器的數據)

7.從機發送應答信號

8.主機發送停止信號

4.2 從MPU6050的一個寄存器讀一個字節的數據

1.主機(Exynos4412)發送起始信號

2.主機發送從機地址(MPU6050的地址)及讀寫方向(寫)

3.從機(MPU6050)發送應答信號

4.主機發送一個字節數據(要寫的寄存器的地址)

5.從機發送應答信號

6.主機(Exynos4412)發送起始信號

7.主機發送從機地址(MPU6050的地址)及讀寫方向(讀)

8.從機(MPU6050)發送應答信號

9.從機發送一個字節數據(要讀的寄存器中的數據)

10.主機發送非應答信號(不再接收更多的數據)

11.主機發送停止信號

5 練習

簡述通過主機從MPU6050中的一個寄存器中讀一個字節的數據的過程

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

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

相關文章

HJ103 Redraiment的走法

題目: HJ103 Redraiment的走法 題解: dfs 暴力搜索 枚舉數組元素,作為起點如果后續節點大于當前節點,繼續向后搜索記錄每個起點的結果,求出最大值 public int getLongestSub(int[] arr) {int max 0;for (int i 0…

data_loader返回的每個batch的數據大小是怎么計算得到的?

data_loader是一個通用的術語,用于表示數據加載器或數據批次生成器。它是在機器學習和深度學習中常用的一個概念。 一、data loader 數據加載器(data loader)是一個用于加載和處理數據集的工具,它可以將數據集劃分為小批次&#…

提示(Prompt)工程中提示詞的開發優化基礎概念學習總結

本文對學習過程進行總結,僅對基本思路進行說明,結果在不同的模型上會有差異。 提示與提示工程 提示:指的是向大語言模型輸入的特定短語或文本,用于引導模型產生特定的輸出,以便模型能夠生成符合用戶需求的回應。 提示…

內存學習——堆(heap)

目錄 一、概念二、自定義malloc函數三、Debug運行四、heap_4簡單分析4.1 heap管理鏈表結構體4.2 堆初始化4.3 malloc使用4.4 free使用 一、概念 內存分為堆和棧兩部分: 棧(Stack)是一種后進先出(LIFO)的數據結構&…

AVFormatContext封裝層:理論與實戰

文章目錄 前言一、封裝格式簡介1、FFmpeg 中的封裝格式2、查看 FFmpeg 支持的封裝格式 二、API 介紹三、 實戰 1:解封裝1、原理講解2、示例源碼 13、運行結果 14、示例源碼 25、運行結果 2 四、 實戰 2:轉封裝1、原理講解2、示例源碼3、運行結果 前言 A…

文章解讀與仿真程序復現思路——電力系統自動化EI\CSCD\北大核心《考慮電力-交通交互的配電網故障下電動汽車充電演化特性》

這個標題涉及到電力系統、交通系統和電動汽車充電的復雜主題。讓我們逐步解讀: 考慮電力-交通交互的配電網故障: 電力-交通交互: 指的是電力系統和交通系統之間相互影響、相互關聯的關系。這可能涉及到電力需求對交通流量的影響,反…

回溯算法之N皇后

一 什么是回溯算法 回溯算法(Backtracking Algorithm)是一種用于解決組合優化問題的算法,它通過逐步構建候選解并進行驗證,以尋找所有滿足特定條件的解。回溯算法通常應用于在給定約束條件下枚舉所有可能解的問題,如…

Git—文件添加查看刪除修改

目錄 1.添加文件—場景一 2.查看.git文件 3.添加文件—場景三 4.修改文件 5.版本回退 6.撤銷修改 7.刪除文件 1.添加文件—場景一 在包含.git的目錄下新建?個ReadMe文件,我們可以使用 git add 命令可以將文件添加到暫存 區: ●添加一個或多個文…

Matlab數學建模算法之小波神經網絡詳解

🔗 運行環境:Matlab 🚩 撰寫作者:左手の明天 🥇 精選專欄:《python》 🔥 推薦專欄:《算法研究》 🔐#### 防偽水印——左手の明天 ####🔐 💗 大家…

vue的屬性

key 預期:number | string | boolean (2.4.2 新增) | symbol (2.5.12 新增) key 的特殊 attribute 主要用在 Vue 的虛擬 DOM 算法,在新舊 nodes 對比時辨識 VNodes。如果不使用 key,Vue 會使用一種最大限度減少動態元素并且盡可能的嘗試就地…

2022藍橋杯c組求和

題目名字 求和 題目鏈接 題意 輸入的每個數都要兩兩相乘,然后再加起來,求最后總和; 思路 每個數乘這個數的前綴和即可 算法一:前綴和 實現步驟 先把前綴和寫出來再寫for循環每個數都乘以自己的前綴和; 實現步驟 直接…

存儲成本降71%,怪獸充電歷史庫遷移OceanBase

怪獸充電作為共享充電寶第一股,業務增長迅速,以至于業務架構不停地增加組件。在驗證 OceanBase 可以簡化架構并帶來更大的業務價值后,首次嘗試在歷史庫中使用 OceanBase 替代 MySQL,存儲成本降低 71%。本文為怪獸充電運維架構部王…

Docker 入門

Docker 入門 基礎 不同操作系統下其安裝包、運行環境是都不相同的!如果是手動安裝,必須手動解決安裝包不同、環境不同的、配置不同的問題 而使用Docker,這些完全不用考慮。就是因為Docker會自動搜索并下載MySQL。注意:這里下載…

【C++】輸入輸出流 ⑥ ( cout 標準輸出流對象 | cout 常用 api 簡介 | cout.put(char c) 函數 )

文章目錄 一、cout 標準輸出流對象1、cout 標準輸出流對象簡介2、cout 常用 api 簡介 二、cout.put(char c) 函數1、cout.put(char c) 函數 簡介2、代碼示例 - cout.put(char c) 函數 一、cout 標準輸出流對象 1、cout 標準輸出流對象簡介 cout 是 標準輸出流 對象 , 是 ostrea…

端口被占用 --- 解決方案

問題描述 加速服務啟動失敗,443端口被magentproc(1576)占用。請關掉占用443端口的程序或者嘗試使用系統代理模式。 問題解決 按下 win R 打開 輸入cmd 輸入命令 netstat -ano | findstr 443 找到 0.0.0.0:443 對應的端口 (1576) 按下 ctrl shift esc, 打開任務管…

綜述 2023-IEEE-TCBB:生物序列聚類方法比較

Wei, Ze-Gang, et al. "Comparison of methods for biological sequence clustering." IEEE/ACM Transactions on Computational Biology and Bioinformatics (2023). https://ieeexplore.ieee.org/document/10066180 被引次數:1;研究背景&am…

力扣題:數字與字符串間轉換-12.13

力扣題-12.13 [力扣刷題攻略] Re:從零開始的力扣刷題生活 力扣題1:442. 數組中重復的數據 解題思想:直接相除即可 class Solution(object):def optimalDivision(self, nums):""":type nums: List[int]:rtype: str"&qu…

Transformer 簡介

Transformer 是 Google 在 2017 年底發表的論文 Attention Is All You Need 中所提出的 seq2seq 模型。Transformer 模型的核心是 Self-Attention 機制,能夠處理輸入序列中的每個元素,并能計算其與序列中其他元素的交互關系的方法,從而能夠更…

再見了Future,圖解JDK21虛擬線程的結構化并發

Java為我們提供了許多啟動線程和管理線程的方法。在本文中,我們將介紹一些在Java中進行并發編程的選項。我們將介紹結構化并發的概念,然后討論Java 21中一組預覽類——它使將任務拆分為子任務、收集結果并對其進行操作變得非常容易,而且不會不…

Unity中Shader黑白閥值后處理效果

文章目錄 前言一、我們先來PS看一下黑白閥值的效果二、使用step(a,b)函數實現效果三、實現腳本控制黑白閥值1、在Shader屬性面板定義控制閥值變量2、把step的a改為_Value3、在后處理腳本設置公共成員變量,并且設置范圍為(0,1)4、在Graphics.B…