1. 程式人生 > >高通msm8916 gpio筆記(基於裝置樹)

高通msm8916 gpio筆記(基於裝置樹)

這次完成的任務是要使能高通8053平臺的i2c和spi,主要做的工作就是在裝置樹檔案中新增節點資訊。主要的工作在於對裝置樹檔案的修改,主要修改了msm8953-pinctrl.dtsi和msm8953.dtsi兩個檔案。 msm8953-pinctrl.dtsi是配置MSM8953晶片中的GPIO。在此檔案中定義i2c使用哪個gpio。 因為引腳複用功能的存在,所以要先配置i2c的引腳複用功能,在msm8953-pinctrl.dtsi中進行如下配置: i2c_4 { i2c_4_active: i2c_4_active { /*i2c處於active狀態*/ /* active state */ mux { pins = "gpio14", "gpio15"; /*i2c有兩根線,分別是SDA和SCL*/ /* SDA用到了gpio14,SCL用到了gpio15*/ function = "blsp_i2c4"; /*這個gpio組支援功能複用,在i2c_4_active中,gpio說明採用"blsp_i2c4"功能*/ }; config { pins = "gpio14", "gpio15"; drive-strength = <2>; /*設定gpio14,gpio15這個pin腳組的驅動能力為2MA*/ bias-disable; /*選項有bias-pull-up、bias-pull-down和bias-disable。這裡使用bias-disable,代表no-pull*/ }; }; i2c_4_sleep: i2c_4_sleep { /*i2c處於sleep狀態*/ /* suspended state */ mux { pins = "gpio14", "gpio15"; function = "gpio"; /*這時pins的功能設定為普通的gpio功能。這裡體現出了pin腳的功能複用。*/ }; config { pins = "gpio14", "gpio15"; drive-strength = <2>; /*驅動能力設定為2MA*/ bias-disable; }; }; }; 接下來,需要在檔案msm8953.dtsi中新增一個新的i2c裝置樹節點: 根據spec獲取實體地址,中斷號等。 i2c_4: [email protected] { /* BLSP1 QUP4 */ /*i2c_4使用的是BLSP1 QUP4,對應的實體地址為0x78b8000*/ compatible = "qcom,i2c-msm-v2"; #address-cells = <1>; #size-cells = <0>; reg-names = "qup_phys_addr"; reg = <0x78b8000 0x600>; /*i2c_4對應的實體地址*/ interrupt-names = "qup_irq"; interrupts = <0 98 0>; /*根據spec可以得到
BLSP1 QUP4對應的中斷號為98,第三個0的含義為:*/ /*1: low-to-high edge triggered;2: high-to-low edge triggered;3: active high-level-sensitive;4: active low-level-sensitive*/ qcom,clk-freq-out = <400000>; /*希望得到的i2c匯流排時鐘頻率,HZ*/ qcom,clk-freq-in = <19200000>; /*提供的核心時鐘頻率,HZ*/ clock-names = "iface_clk", "core_clk"; clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,
<&clock_gcc clk_gcc_blsp1_qup4_i2c_apps_clk>; pinctrl-names = "i2c_active", "i2c_sleep"; /*用到的pinctrl。*/ pinctrl-0 = <&i2c_4_active>; pinctrl-1 = <&i2c_4_sleep>; qcom,noise-rjct-scl = <0>; qcom,noise-rjct-sda = <0>; qcom,master-id = <86>; dmas = <&dma_blsp1 10 64 0x20000020 0x20>,
<&dma_blsp1 11 32 0x20000020 0x20>; dma-names = "tx", "rx"; status = "okay"; }; 確認i2c是否配置成功的方法: adb shell cd /dev/ ls i2c* 會看到所新增的i2c裝置。 使用示波器可以觀察到正確的波形,證明配置正確了。 對spi的配置和i2c類似,主要在msm8953-pinctrl.dtsi和msm8953.dtsi中進行修改: 在msm8953-pinctrl.dtsi中新增如下程式碼: spi3 { spi3_default: spi3_default { /* active state */ mux { /* MOSI, MISO, CLK */ pins = "gpio8", "gpio9", "gpio11"; /* 在這裡,spi使用四根線,MOSI、MISO、CLK和CS。*/ /* MOSI對應gpio8,MISO對應gpio9,CLK對應gpio11,CS對應gpio10*/ /* spi普遍使用三根或四根線,在需要片選時需要加CS線*/ function = "blsp_spi3"; /* 功能複用,設定功能為"blsp_spi3" */ }; config { pins = "gpio8", "gpio9", "gpio11"; drive-strength = <12>; /* 12 MA */ /*驅動能力為12MA*/ bias-disable = <0>; /* No PULL */ /*有三個選項:bias-disable、bias-pull-down、bias-pull-up*/ }; }; spi3_sleep: spi3_sleep { /* suspended state */ mux { /* MOSI, MISO, CLK */ pins = "gpio8", "gpio9", "gpio11"; function = "gpio"; /* 功能複用,在sleep狀態時作為gpio。*/ }; config { pins = "gpio8", "gpio9", "gpio11"; drive-strength = <2>; /* 2 MA */ /* 睡眠狀態時的驅動能力設為2MA */ bias-pull-down; /* PULL Down */ }; }; spi3_cs0_active: cs0_active { /*設定CS片選線的gpio*/ /* CS */ mux { pins = "gpio10"; function = "blsp_spi3"; /*功能複用*/ }; config { pins = "gpio10"; drive-strength = <2>; bias-disable = <0>; }; }; spi3_cs0_sleep: cs0_sleep { /* CS */ mux { pins = "gpio10"; function = "gpio"; }; config { pins = "gpio10"; drive-strength = <2>; bias-disable = <0>; }; }; }; 在msm8953.dtsi中新增節點: spi_3: [email protected] { /* BLSP1 QUP3 */ /*使用BLSP1 QUP3*/ compatible = "qcom,spi-qup-v2"; #address-cells = <1>; #size-cells = <0>; reg-names = "spi_physical", "spi_bam_physical"; reg = <0x78b7000 0x600>, <0x7884000 0x1f000>; interrupt-names = "spi_irq", "spi_bam_irq"; interrupts = <0 97 0>, <0 238 0>; /*根據表2確定中斷號*/ spi-max-frequency = <19200000>; /*最大的SPI裝置的頻率*/ pinctrl-names = "spi_default", "spi_sleep"; /*所用到的pin腳和功能*/ pinctrl-0 = <&spi3_default &spi3_cs0_active>; pinctrl-1 = <&spi3_sleep &spi3_cs0_sleep>; clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>, <&clock_gcc clk_gcc_blsp1_qup3_spi_apps_clk>; clock-names = "iface_clk", "core_clk"; qcom,infinite-mode = <0>; qcom,use-bam; /*使用BAM模式*/ qcom,use-pinctrl; qcom,ver-reg-exists; qcom,bam-consumer-pipe-index = <8>; qcom,bam-producer-pipe-index = <9>; qcom,master-id = <86>; }; 如果配置正確,可以在/sys/class/spi_master/spi下看到spi匯流排: adb shell cd /sys/class/spi_master/ ls spi和i2c知識總結: SPI匯流排由三條訊號線組成。SPI匯流排可以實現 多個SPI裝置互相連線。提供SPI序列時鐘的SPI裝置為SPI主機或主裝置(Master),其他裝置為SPI從機或從裝置(Slave)。主從裝置間可以實現全雙工通訊,當有多個從裝置時,還可以增加一條從裝置選擇線。  如果用通用IO口模擬SPI匯流排,必須要有一個輸出口,一個輸入口,另一個口則視實現的裝置型別而定,如果要實現主從裝置,則需輸入輸出口,若只實現主裝置,則需輸出口即可,若只實現從裝置,則只需輸入口即可。 I2C匯流排是雙向、兩線、序列、多主控(multi-master)介面標準,具有匯流排仲裁機制,非常適合在器件之間進行近距離、非經常性的資料通訊。在它的協議體系中,傳輸資料時都會帶上目的裝置的裝置地址,因此可以實現裝置組網。  如果用通用IO口模擬I2C匯流排,並實現雙向傳輸,則需一個輸入輸出口,另外還需一個輸出口。 iic的兩根線:SDA、SCL,結構如下圖所示。分別表示: SDA:序列資料線。 SCl:序列時鐘線。 圖 IIC結構示意圖 圖 IIC匯流排資料傳輸協議示意圖 spi的四根線:MOSI、MISO、CS、CLK,spi匯流排的結構和資料的傳送格式如下圖所示。分別代表: MOSI:主輸出,從輸入。 MISO:主輸入,從輸出。 CS:片選。 CLK:同步時鐘。
圖 spi結構和資料傳送格式示意圖

相關推薦

msm8916 gpio筆記基於裝置

這次完成的任務是要使能高通8053平臺的i2c和spi,主要做的工作就是在裝置樹檔案中新增節點資訊。主要的工作在於對裝置樹檔案的修改,主要修改了msm8953-pinctrl.dtsi和msm8953.dtsi兩個檔案。 msm8953-pinctrl.dtsi是配置MSM8953晶片中的GPIO。在此

《第一行程式碼》 第五章:全域性大喇叭 筆記基於Android8.0

由於Android8.0對廣播機制做了很大的調整理,導致《第一行程式碼》中很多例項無法正常執行,因此我結合書本,自行整理了一下。 廣播需要接收器和傳送器。系統的動作都會發送一條廣播,例如電量的變化,系

qcom 音訊相關的dsp driver筆記基於msm8996平臺

原址 0 前言 1 關於acdb 1.1 從audio_calibration.c說起 1.2 關於acdb配置的註冊 1.3 關於acdb配置過程 2 關於dsp driver 3 關於asm 4 關於adm 5 關於afe 6 關於apr訊息 7 關於channel ma

Python Web介面開發學習筆記基於Django框架

通過學習蟲師的《Python web介面開發與測試》一書記錄並總結一些主要知識點和心得。 2017.12.04 1. 建立一個Django專案 前提:安裝好python和Django,以及需要一個IDE,之前的python程式都在Eclipse IDE中編輯,現在使用Ato

資料結構與演算法JavaScript描述讀書筆記js實現

js定義二叉查詢樹 //建立建構函式建立節點 function Node(data){ this.data = data; this.left = null; this.right = null; } function tree(){ this.root = nu

《大話資料結構》——學習筆記棧&串&

棧 棧的定義 棧(stack)是限定僅在表尾進行插入和刪除操作的線性表 棧是一種後進先出(Last In First Out)的線性表,簡稱LIFO結構 棧的順序儲存結構與鏈式儲存結構 棧的順序儲存結構如下圖 棧的鏈式儲存結構如下圖

linux驅動由淺入深系列:camera驅動之二基於平臺的V4L2結構及程式碼分析

在上一篇文章中介紹了camera的基礎知識和相關概念,我們一起來了解一下驅動相關的程式碼結構。本文以高通+android平臺為示例,首先看一下整體框圖:這張圖是從整體上來看的1,圖中最下面的是kernel層的驅動,其中按照V4L2架構實現了camera sensor等驅動,向

平臺msm8953 Linux DTS(Device Tree Source)裝置詳解之二DTS裝置匹配過程

本系列導航:有上一篇文章,我們瞭解了dts的背景知識和相關基礎,這次我們對應實際裝置進行一下相關分析。DTS裝置樹的匹配過程一個dts檔案確定一個專案,多個專案可以包含同一個dtsi檔案。找到該專案對應的dts檔案即找到了該裝置樹的根節點。kernel\arch\arm\bo

JavaScript級程序設計筆記

循環語句 基本 能力 至少 oat som 最大數 earch define 1. ECMA規定了這門語言的下列組成部分: 語法、 類型、語句、 關鍵字、保留字、操作符、 對象 2. 什麽是 ECMAScript 兼容支持 ECMA描述的所有“類型、值、對象、屬性、函數以及

OpenLDAP學習筆記基於OpenLDAP-2.4.x

ldap slapd 同步 1.1、什麽是目錄服務(Directory Services)? 目錄是一個特殊的數據庫,專門用於搜索和瀏覽,另外也支持基本的查詢和更新功能。 目錄是一個為查詢、瀏覽和搜索而優化的專業分布式數據庫,它呈樹狀結構組織數據,就好象Linux/Unix系統中的文件

《深度學習精要基於R語言清中文版PDF+清英文版PDF+源代碼

dbd 語言 process sha http com cto oss RoCE 下載:https://pan.baidu.com/s/11zySQB5f0s9SXNgJdBOphg 更多最新的資料:http://blog.51cto.com/3215120 《深度學習精要

(Flask Web開發:基於Python的Web應用開發實戰)------學習筆記第2章

第2章 程式的基本結構 本章將帶你瞭解 Flask 程式各部分的作用,編寫並執行第一個 Flask Web 程式。 2.1 初始化   所有 Flask 程式都必須建立一個程式例項,程式例項是 Flask 類的物件。   Web 伺服器使用一種名為 Web 伺服器閘

分享《深度學習精要基於R語言》+PDF+源碼+Joshua F.Wiley+

blog aaa 講解 pro 高清 water tex href ces 下載:https://pan.baidu.com/s/14UlxD5VJRY92UpP7Wr6Taw 更多最新的資料:http://blog.51cto.com/14087171 《深度學習精要(基

linux-uart筆記

概述 驅動: drivers/tty/serial/ msm_serial_hs_lite.c: 低速版本, 裝置樹內容配置為compatible = "qcom,msm-lsuart-v14"; msm_serial_hs.c: 高速版本,  裝置樹內容配置為com

21天學C++學習筆記:類和對象

行為 邏輯 在一起 編譯 特征 str 不能 的人 學習 1. 類和對象 現實中的人等事物往往具備一些特征並且可以做某些事情,要在程序中模擬這些事物,需要一個結構,將定義其屬性(數據)以及其可用這些屬性執行的操作(函數)整合在一起。這種結構就是類,而這種結構的每一個實例就

平臺GPIO模擬PWM控制背光

    很多時候由於節省硬體資源,降低成本,會把PWM控制晶片去掉或者是改做它用,導致當我們想用PWM方式控制背光時只能使用帶有clk功能的GPIO口。本篇文件就來講解下如何使用GPIO模擬PWM功能進行背光的控制。本文以MSM8909為例。 一、選取GPIO口並進行配置

基於裝置gpio的簡單操作

目標: 學習裝置樹中GPIO資源的使用,實現按鍵中斷簡單驅動程式。原理圖:  tiny4412 底板上有4顆按鍵,分別為連線在 GPX3_2、GPX3_3、GPX3_4、GPX3_5 ,引腳狀態常高。裝置樹: interrupt_demo: interrupt_demo

基於裝置GPIO驅動(通過系統節點控制)

#include <linux/types.h> #include <linux/pm.h> #include <linux/gpio.h> #include <linux/slab.h> #include <linux/init.h> #inclu

OpenCV學習筆記二十六——小試SVM演算法ml OpenCV學習筆記二十七——基於級聯分類器的目標檢測objdect OpenCV學習筆記二十八——光流法對運動目標跟蹤Video Ope

OpenCV學習筆記(二十六)——小試SVM演算法ml  總感覺自己停留在碼農的初級階段,要想更上一層,就得靜下心來,好好研究一下演算法的東西。OpenCV作為一個計算機視覺的開源庫,肯定不會只停留在數字影象處理的初級階段,我也得加油,深入研究它的演算法庫。就從ml入手

模式識別Pattern Recognition學習筆記二十七-- 基於搜尋演算法的快速近鄰法

       近鄰法中計算距離需要遍歷,帶來很大的計算量和儲存量,為了改善這兩方面的效能,有人提出採用分枝界定演算法(Branch-Bound  Algorithm)來改進近鄰法,主要分為兩個階段:1)利用人工劃分或K-means聚類演算法或其他動態聚類演算法將樣本集X劃分