正點原子[第二期]Linux之ARM(MX6U)裸機篇學習筆記-24.1,2 SPI驅動實驗-SPI協議介紹

前言:

本文是根據嗶哩嗶哩網站上“正點原子[第二期]Linux之ARM(MX6U)裸機篇”視頻的學習筆記,在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。

引用:

正點原子IMX6U倉庫 (GuangzhouXingyi) - Gitee.com

《【正點原子】I.MX6U嵌入式Linux驅動開發指南V1.5.2.pdf》

正點原子資料下載中心 — 正點原子資料下載中心 1.0.0 文檔

SPI學習參考資料:

簡述SPI通信協議-01_cpha選擇為第一個邊沿-CSDN博客

SPI中的CPHA,CPOL詳解-CSDN博客

正文:

本文是 “正點原子[第二期]Linux之ARM(MX6U)裸機篇--第24講 SPI驅動。本節將參考正點原子的視頻教程第24講和配套的正點原子開發指南文檔進行學習。

0. 概述

通I2C一樣,SPI是很常用的通信接口,也可以通過SPI來連接眾多的傳感器。相比I2C接口,SPI接口的通信速度很快,I2C最多400KHz,但是SPI可以到達即使MHz。I.MX6U 也有4個SPI接口,可以通過這4個SPI接口來連接一些SPI外設。I.MX6U-ALHPA使用SPI3接口連接了一個6周傳感器 ICM-20608,本章我們就來學習如何使用I.MX6U的SPI接口來驅動ICM-20608,讀取ICM-20608的六軸數據。

1. SPI簡介

上一章我們講解了I2C,I2C是串行通信的一種,只需要兩根線就可以完成主機和從機之間的通信,但是I2C的速度最高只能到400KHz,如果對于訪問速度要求比較高的話I2C就不適合了。本章我們就來學習另外一個和I2C一樣廣泛使用的串行協議:SPI,SPI的全稱是 Serial Peripheral Interface,也就是串行外圍設備接口。SPI是Motorola公司推出的一種同步串行接口技術,是一種高速,全雙工的同步通信協議,SPI時鐘頻率相比I2C要高很多,最高可以工作到上百Mhz。SPI以主從方式工作,通常是有一個主設備和一個或多個從設備,一般SPI需要4根線,但是也可以使用三根線(單向傳輸),本章我們講解標準的4線SPI,這4根線如下:

  1. CS/SS, Chip Select/Slave Select,這個是片選信號線,用于選擇需要進行通信的從設備。I2C主機是通過發送從機設備地址來選擇需要進行通信的從設備的,SPI主機不需要發送從機設備地址,而是直接將相應的從機設備片選信號拉低。
  2. SCK,Serial Clock,串行時鐘,和I2C的SCL一樣,為SPI通信提供時鐘。
  3. MOSI/SDO,Master Out Slave In/Serial Data Output,簡稱主出從入線,這根數據線只能用戶主機向從機發送數據,也就是主機輸出,從機輸入。
  4. MISO/SDI,Master In Slave Out/Serial Data Input,簡稱主入從出線,這根數據線只能用于從機向主機發送數據,也就是主機輸入,從機輸出。

SPI 通信都是由主機發起的,主機需要提供通信的時鐘信號。主機通過SPI線連接多個從設備的結構如下圖所示:

?

1.1 SPI工作模式

SPI由四種工作模式,通過串行時鐘極性(CPOL: Clock Polity)和相位(CPHA:Clock Phase)的搭配來得到四種工作模式:

描述
CPOL=0串行時鐘空閑狀態為低電平
CPOL=1

串行時鐘空閑狀態為高電平

此時可以通過配置時鐘相位CPHA(Clock Phase)來選擇具體的傳輸協議

CPHA=0串行時鐘的第一個跳變沿(上升沿或下降沿)來采集數據
CPHA=1串行時鐘的第二個跳變沿(上升沿或下降沿)來采集數據

這四種工作模式如下圖所示:

1.2 什么是SPI的 CPHA 第一個上升沿,第二個上升沿?

SPI協議的CPHA(Clock Phase)相位決定是在第一個跳變沿還是在第二個跳變沿采集數據,那么什么時第一個跳變沿,什么又是第二個跳變沿哪?問下"百度AI助手好了",結果輸出如下:

但是,百度AI助手大模型這里總結提煉的東西大部分是正確,但是中間的CPOL(Clock Polarity)和CPHA(Clock Phase)組合之后的采集沿是在第一個跳變沿采集還是在第二個跳變沿采集,百度AI助手大模型搞錯了。這就是AI大模型助手的問題,有時間會給出看似正確但是實際上細節錯誤的東西。

不過這些百度AI助手提取出來的信息對于我來講還是有效的,第一它給出了一些SPI CPOL(Clock Polarity)和CPHA(Clock Phase)的組合概念提煉,第二它給出了引用鏈接來源,我去讀一下它的引用鏈接不就能得到有用信息了么,贊。

把百度AI助手提供的有用信息總結一下就是:

SPI協議中的CPHA(Clock Phase)決定了數據傳輸采樣和移位方式,具體涉及到時鐘信號的跳變沿。在一個時鐘周期內,會有兩次跳變沿:上升沿(從低電平到高電平的變化)和下降沿(從高電平到低電平的變化)。

  • 當CPHA=0時,表示數據在使用信號的第一個跳變沿(即上升沿或下降沿,具體取決于CPOL的設置)進行采樣。
  • 當CPHA=1時,表示數據在時鐘信號的第二個跳變邊沿進行采樣。

結合CPOL(Clock Polarity)的設置,可以形成SPI的四種工作模式:

  1. Mode0 (CPOL=0, CPHA=0):數據在時鐘的第一個跳變沿采樣,因為CPOL=0 低電平表示空閑Idle,所以第一個跳變沿是上升沿(由低到高)采樣。
  2. Mode1 (CPOL=0, CPHA=1):數據在時鐘的第二個跳變沿采樣,因為CPOL=0 低電平表示空閑Idle,所以第二個跳變沿是下降沿(由高到低)采樣。
  3. Mode2 (CPOL=1, CPHA=0):數據在時鐘的第一個跳變沿采樣,因為CPOL=1?高電平表示空閑Idle,所以第一個跳變沿是下降沿(由高到低)采樣。
  4. Mode3(CPOL=1, CPHA=1):數據在時鐘的第二個跳變沿采樣,因為CPOL=1?高電平表示空閑Idle,所以第二個跳變沿是上升沿(由低到高)采樣。

參考如下鏈接里的博文,給出了總結的圖片,圖片總結的很完備了

SPI中的CPHA,CPOL詳解-CSDN博客

我自己對SPI上升沿下降沿的理解,自己畫的圖:

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

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

相關文章

計算機組成原理易混淆知識點總結(持續更新)

目錄 1.機器字長,存儲字長與指令字長 2.指令周期,機器周期,時鐘周期 3.CPI,IPS,MIPS 4.翻譯程序和匯編程序 5.計算機體系結構和計算機組成的區別和聯系 6.基準程序執行得越快說明機器的性能越好嗎? 1.機器字長,存儲字長與指令字長 不同的機器三者…

AI智能體|扣子Coze文生圖功能接入微信公眾號

大家好,我是無界生長。 AI智能體|扣子Coze文生圖功能接入微信公眾號本文分享了如何將Coze平臺的文生圖功能接入微信公眾號的詳細操作流程,包括創建圖像流、創建并配置Bot、設置提示詞和開場白、調試、發布等步驟。如果看完還沒學會的話&…

網頁圖片加載慢的求解指南

網頁/圖片加載慢的求解指南 一、前言與問題描述 今天剛換上華為的HUAWEI AX3 Pro New,連上WIFI后測速雖然比平時慢,但是也不算太離譜,如下圖所示: 估計讀者們有也和作者一樣,還沒意識到事情的嚴重性😁。 …

08Django項目--用戶管理系統--查(前后端)

對應視頻鏈接點擊直達 TOC 一些朋友加我Q反饋,希望有每個階段的完整項目代碼,那從今天開始,我會上傳完整的項目代碼。 用戶管理,簡而言之就是用戶的增刪改查。 08項目點擊下載,可直接運行(含數據庫&…

PHP框架 Laravel

現在因為公司需求,需要新開一個Laravel框架的項目,毫無疑問,我又被借調過去了,最近老是被借調,有點陰郁,不過反觀來看,這也是好事,又可以復習和鞏固一下自己的知識點,接下…

大數據開發面試題【Spark篇】

115、Spark的任務執行流程 driver和executor,結構式一主多從模式, driver:spark的驅動節點,用于執行spark任務中的main方法,負責實際代碼的執行工作;主要負責:將代碼邏輯轉換為任務、在executo…

編譯qt5.15.2(mac/windows)的mysql驅動(附帶編譯好的文件)

文章目錄 0 背景1 編譯過程2 福利 0 背景 因為需要連接到mysql數據庫,所以需要連mysql驅動。 1 編譯過程 1,打開文件/Users/mac/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/sqldrivers.pro,注釋掉QMAKE_USE mysql; 如…

國產【Jetson Xavier NX】——從裸機到深度學習開發環境配置

1、設置系統從固態硬盤啟動 英偉達官方NX出廠是直接將SD卡(64/128G)燒錄系統作為系統盤使用,國產NX出廠是將系統配置在8G內存中,在后續使用中需配置大量開發包,故將系統設置為從固態硬盤啟動。 參考鏈接 https://blo…

vue3中使用svg圖標

安裝依賴 npm i vite-plugin-svg-icons -D vite.config.ts中添加配置 主要為指定svg圖標存放路徑以及命名方式 import { defineConfig } from vite import vue from vitejs/plugin-vue import { createSvgIconsPlugin } from vite-plugin-svg-icons import path from path;…

總結力學_3

參考: 陳曦<<力學講義>>http://ithatron.phys.tsinghua.edu.cn/downloads/mechanics.pdf 10 非慣性系 10.1 勻加速平動非慣性系 10.2 定軸勻速轉動非慣性系 可以更好刻劃總結力學_2的有心力運動、質點系的運動的工具! 11 線性系統 11.1 線性系統、11.2 受迫…

【深入理解Python中的裝飾器】

文章目錄 前言裝飾器的基本概念帶參數的裝飾器類作為裝飾器結論 前言 裝飾器是Python中一個非常強大且靈活的特性&#xff0c;它允許程序員在不修改原函數代碼的情況下&#xff0c;增加或修改函數的行為。裝飾器本質上是一個接受函數作為參數并返回一個新函數的函數。本文將深…

點擊登錄按鈕先檢測輸入框的規則檢測(vue組合式)

<template><el-form :model"user" :rules"rules" ref"loginForm" label-width"auto" style"max-width: 600px"><el-form-item label"用戶名" prop"name"><el-input v-model"…

【Linux-LCD 驅動】

Linux-LCD 驅動 ■ Framebuffer 簡稱 fb■ LCD 驅動程序編寫■ 1、LCD 屏幕 IO 配置■ 2、LCD 屏幕參數節點信息修改■ 3、LCD 屏幕背光節點信息■ 4、使能 Linux logo 顯示 ■ 設置 LCD 作為終端控制臺■ 1、設置 uboot 中的 bootargs■ 2、修改/etc/inittab 文件 ■ LCD 背光…

ROS的noetic版本

設置 sources.list 執行下面命令&#xff0c;設置從清華源下載 ROS 軟件包。 sudo sh -c echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list設置密鑰 sudo apt-key adv --keyse…

鴻蒙知識點總結

1 Stage模型應用程序包結構 在開發態&#xff0c;一個應用包含一個或者多個Module&#xff0c;可以在DevEco Studio工程中創建一個或者多個Module。Module是HarmonyOS應用/服務的基本功能單元&#xff0c;包含了源代碼、資源文件、第三方庫及應用/服務配置文件&#xff0c;每一…

快速上手 HuggingFace

HuggingFace HuggingFace 是類似于 GitHub 的社區&#xff0c;它主要提供各種的模型的使用&#xff0c;和 github 不同的是&#xff0c;HuggingFace 同時提供了一套框架&#xff0c;進行模型推理&#xff0c;模型訓練、和模型庫文件的管理等等。本文將介紹&#xff0c;如何快速…

【MySQL精通之路】全文搜索(9)-全文解析器-MeCab

主博客&#xff1a; 【MySQL精通之路】全文搜索功能-CSDN博客 目錄 1.介紹 2.安裝MeCab Parser插件 3.創建使用MeCab分析器的FULLTEXT索引 4.MeCab Parser空間處理 5.MeCab分析程序停止字處理 6.MeCab Parser術語搜索 7.MeCab分析程序通配符搜索 8.MeCab語法分析器短語…

echarts學習篇

一、使用echarts 1.引入 Apache ECharts <!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <!-- 引入剛剛下載的 ECharts 文件 --> <script src"echarts.js"></script> </head> </html> 2.…

深度神經網絡——什么是自動編碼器?

自動編碼器 自動編碼器&#xff08;Autoencoders&#xff09;是無監督學習領域中一種重要的神經網絡架構&#xff0c;它們主要用于數據壓縮和特征學習。 自動編碼器的定義&#xff1a; 自動編碼器是一種無監督機器學習算法&#xff0c;它通過反向傳播進行訓練&#xff0c;目標…

【夏之以寒-Kafka專欄 02】什么情況下會發生 QueueFullException?

作者名稱&#xff1a;夏之以寒 作者簡介&#xff1a;專注于Java和大數據領域&#xff0c;致力于探索技術的邊界&#xff0c;分享前沿的實踐和洞見 文章專欄&#xff1a;夏之以寒-kafka專欄 專欄介紹&#xff1a;本專欄旨在以淺顯易懂的方式介紹Kafka的基本概念、核心組件和使用…