1. 程式人生 > >關於qualcomm平臺i2c和spi配置學習

關於qualcomm平臺i2c和spi配置學習

前言:

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

一、msm8916-pinctrl.dtsi是配置MSM8916晶片中的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;
};
};
};


二、需要在檔案msm8916.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_gccclk_gcc_blsp1_ahb_clk>,
                 <&clock_gccclk_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 640x20000020 0x20>,
       <&dma_blsp1 11 32 0x200000200x20>;
dma-names = "tx","rx";
status = "okay";
};

確認i2c是否配置成功的方法:

adbshell

cd/dev/

lsi2c*

會看到所新增的i2c裝置。

使用示波器可以觀察到正確的波形,證明配置正確了。

對spi的配置和i2c類似,主要在msm8916-pinctrl.dtsi和msm8916.dtsi中進行修改:

在msm8916-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>;
};
};
};
 


在msm8916.dtsi中新增節點:

spi_3:[email protected] { /* BLSP1 QUP3 */ /*使用BLSP1QUP3*/
compatible= "qcom,spi-qup-v2";
#address-cells= <1>;
#size-cells= <0>;
reg-names= "spi_physical", "spi_bam_physical";
reg= <0x78b7000 0x600>,
<0x78840000x1f000>;
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_gccclk_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匯流排:

adbshell

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結構示意圖、匯流排資料傳輸協議示意圖

spi的四根線:MOSI、MISO、CS、CLK,spi匯流排的結構和資料的傳送格式如下圖所示。分別代表:

MOSI:主輸出,從輸入。

MISO:主輸入,從輸出。

CS:片選。

CLK:同步時鐘。


圖spi結構和資料傳送格式示意圖

相關推薦

關於qualcomm平臺i2cspi配置學習

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

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

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

I2CSPI總線對比

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

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

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

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

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

關於I2CSPI匯流排協議

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

裝置樹之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)的身影。原

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

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

nrf52832用I2CSPI兩種方式驅動LIS2DS12

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

I2CSPI異同及使用注意

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

IDEA 學習筆記之 安裝基本配置

window eclipse 自動 ref size 工作 ips ctr line 安裝和基本配置: 下載:https://www.jetbrains.com/idea/download/#section=windows 下載Zip安裝包: 基礎知識:

1. PostgreSQL-安裝基本配置學習筆記)

安裝和配置 日常使用 buffer java、 note 安裝完成 for ora har 1 PostgreSQL簡介1.1 概述??PostgreSQL數據庫是目前功能最強大的開源數據庫,支持豐富的數據類型(如JSON和JSONB類型,數組類型)和自定義類型。而且它提供

I2C(smbus pmbus)SPI分析

smb manage get 標準 相關 body 通信 管理 體制 2C和SPI作為兩種非常常用的低速外部總線 I2C I2C是以前的飛利浦半導體制定的標準,也就是如今的NXP。 I2C總線由一條數據線(SDA)和一條時鐘線(SCL)組成。設備分主從,主設備提供時鐘,並發

配置Tomcat管理迪士尼網站平臺開發配置虛擬機以及搭建web站點

baidu version 復制 manager new web 映射關系 html 進行 1.用記迪士尼網站平臺開發 haozbbs.com Q1446595067 事本打開Tomcat的目錄下的conf文件中的“tomcat-user.xml”。 2.寫入以下代碼 &l

linux學習-添加多個硬盤lvm配置

list aid 參數 nbsp 新建 only irix 單詞 color 一般,服務器會有多個硬盤,一塊硬盤分區安裝操作系統,另外多塊硬盤分區做存儲使用。現在測試添加多塊硬盤分區,使用lvm進行實現動態磁盤分配。 1.新增硬盤查看fdisk -l可以看到新增的兩塊硬盤s

跨域講解學習三(服務器NginxApache配置

ati 服務器 json servle imp return 進行 xtra alt 問題一、什麽是虛擬主機?   多個域名指向同一個服務器,服務器根據不同的域名把請求轉到不同的應用服務器。 問題二、什麽是反向代理?   反向代理方式是指以代理服務器來接受internet上

SpringBoot學習_yaml介紹yaml配置檔案值獲取

文章目錄 yaml簡介 yaml語法 基本語法 值的寫法 yml配置檔案的值獲取 獲取方法一:用@ConfigurationProperties獲取 yml程式碼提示

MyBatis學習(三)--使用日誌優化配置檔案

寫在前面 大體結構還是參照大大的部落格,但是自己會嘗試補充一些內容 孤傲蒼狼的部落格:https://www.cnblogs.com/xdp-gacl/category/655890.html 程式碼中會有很多重要的註釋,請不要忽略。 一、使用日誌 為了後面方便和deb