1. 程式人生 > >關於高通8053平臺i2c和spi配置的學習總結

關於高通8053平臺i2c和spi配置的學習總結

這次完成的任務是要使能高通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結構和資料傳送格式示意圖

相關推薦

關於8053平臺i2cspi配置學習總結

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

關於qualcomm平臺i2cspi配置學習

前言: 此篇blog主要是要使能qualcomm平臺的i2c和spi,例如怎麼在裝置樹檔案中新增節點資訊,其次是對裝置樹檔案的改。eg.主要修改了msm8916-pinctrl.dtsi msm891

NET Core的mvc服務彩票開獎網平臺搭建Route服務學習總結

依然 pen environ fig 數據 builder 特性 ets space mvc服務 和 route服務彩票開獎網平臺搭建論壇:haozbbs.com Q1446595067程序想要 增加 請求的路由服務,則需要 在ConfigureServices 中增加路由

UART、I2C以及SPI協議學習總結

UART(通用非同步收發器)非同步序列通訊 是屬於非同步通訊。所謂的非同步通訊,簡單來講就是不同步,比如計算機發送給微控制器,計算機只負責把資料通過TXD傳送出來即可,接收資料是微控制器自己的事。UART通訊先是一直保持高電平,傳送資料之前有起始位0,而

I2CSPI總線對比

clas 結束 相對 比較 scl 只有一個 shee 鎖定 因此 1 iic總線不是全雙工,2根線SCL SDA。spi總線實現全雙工,4根線SCK CS MOSI MISO 2 iic總線是多主機總線,通過SDA上的地址信息來鎖定從設備。spi總線只有一個主設備,主設

詳細剖析I2CSPI通訊協議的區別

原文連結:http://m.elecfans.com/article/610220.html 1. 概述I2C與SPI協議 IIC vs SPI現今,在低端數字通訊應用領域,我們隨處可見IIC (Inter-Integrated Circuit) 和 SPI (Serial

初試:優化cpu在MIUI上的配置

前言 當前手機硬體日新月異,在我個人看來,某種程度上手機硬體效能已經過剩,手機的效能反而在於軟體上的優化。比如小米4搭載的高通801這款cpu四核2.5GHZ,效能已經不錯,但是由於MIUI對cpu進行無腦的限頻,均衡模式下,關閉兩個核心,其他兩個核心頻率限制在1036MHz,103

關於I2CSPI匯流排協議

                 關於I2C和SPI匯流排協議IICvs SPI         現今,在低端數字通訊應用領域,我們隨處可見IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。原因是這兩種通訊協議非常適合近

SDM845平臺Sensor學習——4.SLPI(SAM Sensor)--

四:Sensor SLPI層SAM Sensor例項分析 上文中,我們大致瞭解了物理sensor driver整個流程,但在專案中,一般寫這種sensor driver的情況很少。這種sensor driver基本上都是各個vendor廠商

SDM845平臺Sensor學習——2.Hal層--

二:Sensor Hal層程式碼分析 Hal code放在/vendor/qcom/proprietary/sensors-see/中 sensors-hal資料夾中包含framework和sensors資料夾,為本文重點分析物件

裝置樹之I2CSPI例項

I2C例項 clock-frequency i2c匯流排頻率,常用值有100000,400000 address-cells 該屬性值必須為1 size-cells 該屬性值必須為0 i2c具體例項如下圖所示:

i2cspi通訊協議的特點及區別

一、i2c匯流排 i2c是由Philips公司提出的雙線多主機、同步、半雙工、序列低速率、非差分訊號的通訊匯流排。廣泛應用於傳輸速率要求不高、傳輸距離短的場合,最大優勢是可以在總線上擴充套件多個外圍裝置的支援。如soc外部的各外圍裝置與soc之間的通訊,常見的各種物聯網感測

[轉]關於I2CSPI匯流排協議的優缺點

 關於I2C和SPI匯流排協議 IICvs SPI          現今,在低端數字通訊應用領域,我們隨處可見IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。原

Android平臺 OTA差分包的生成方法

1、首先高通平臺的編譯流程與android原生態的編譯流程一樣,需要經歷以下幾步:    a. source build/envsetup.sh;    b. lunch 選擇專案    c. make -j24     編譯完之後    4.make otapackage

8xxx平臺雙MIC設定

dts檔案修改:   qcom,audio-routing =    "RX_BIAS", "MCLK",    "LDO_H", "MCLK",    "SPK_OUT", "MCLK",    "SPK_OUT", "EXT_VDD_SPKR",    "Lineo

android平臺功耗優化方法

1、底電流除錯(Rock Bottom Current Optimization) 底電流在手機飛航模式下除錯。每個平臺的底電流資料可能不一樣,具體可以參考release出來的Current Consumption Data文件或者release note。一般情況下的底電流參考資料上限是: 512M

nrf52832用I2CSPI兩種方式驅動LIS2DS12

本來在這裡寫了些牢騷話,但是想想這是記錄技術文件,還是廢話少說為好 直奔主題 先介紹下LIS2DS12,ST公司出的gsensor,內部自帶mcu ,可以輸出步數、敲擊、翻腕等行為結果,還提供了一個256級的FIFO(可以儲存256組三軸資料),FIFO具有

MDM平臺開發入門

原始碼下載 高通MDM平臺程式碼分為兩個部分:高通私有程式碼 以及 開源公有程式碼 針對某一個平臺,高通會提供一條基線,包括了私有程式碼的版本以及公有程式碼每個庫的revision 公有程式碼下載:在基線中有codeaurora相關的repo下載路徑,找到對應的ma

I2CSPI異同及使用注意

1 iic匯流排不是全雙工,2根線SCL SDA。spi匯流排實現全雙工,4根線SCK CS MOSI MISO 2 iic匯流排是多主機匯流排,通過SDA上的地址資訊來鎖定從裝置。spi匯流排只有一個主裝置,主裝置通過CS片選來確定從裝置 3 iic匯流排傳輸速度在10

Android平臺硬體除錯之Camera篇

Camera工作流程圖Camera的成像原理可以簡單概括如下:景物(SCENE)通過鏡頭(LENS)生成的光學影象投射到影象感測器(Sensor)表面上,然後轉為電訊號,經過A/D(模數轉換)轉換後變為數字影象訊號,再送到數字訊號處理晶片(DSP)中加工處理,再通過IO介面傳輸到CPU中處理,通過DISPLA