1. 程式人生 > >ARM平臺嵌入式Linux下SPI裝置連線

ARM平臺嵌入式Linux下SPI裝置連線

在嵌入式ARM平臺裝置上,經常有在一個SPI bus上面掛接一個或者多個SPI裝置的需求,由於掛載一個裝置的情況比較簡單,本文主要就在嵌入式Linux環境下掛載多個SPI裝置進行說明。

本文所採用的硬體為Toradex 公司Colibri VF61計算機模組和開發載板,核心為Cortex-A5和M4異構雙核,這裡A5執行Toradex官方釋出的Embedded Linux BSP V2.5,M4核心這裡不做使用。

本文涉及Toradex釋出Embedded Linux原始碼下載,Device Tree 定製編譯,相關操作請參考下面文章,本文不做贅述。

Colibri VF61最多可以提供4路SPI bus,不過只有SPI1為系列相容,因此這裡就只使用SPI1,根據手冊,其硬體管腳定義如下:


1). 在連線一個SPI 裝置情況下,則只需要硬體對應連線上面管腳即可,Device Tree預設也已經設定好無需修改,然後按照下面文件說明操作即可

2). 在連線多個SPI裝置情況下,則主要問題是需要多個Chip Selection片選訊號,這裡有兩種解決方案,一種是硬體CS管腳,VF61 SPI1通道除了預設的CS0,還提供額外的4個CS管腳,不過預設為其他功能;另外一種方式為直接使用GPIO作為CS管腳,下面對這兩種方式分別說明:

a). 採用硬體CS管腳

除了預設的SPI1_CS0,VF61還提供了額外4個CS管腳SPI1_PCS1, SPI1_PCS2, SPI1_PCS3;不過由於不是預設功能,需要在Device Tree中修改,下面以除了預設的CS0,再新增一個裝置採用SPI1_PCS1作為CS訊號為例說明。

./ 根據VF61手冊,有連個管腳可以提供SPI1_PCS1功能,我們選擇預設功能為GPIO的SODIMM Pin79來設定為SPI1_PCS1。

//修改&iomuxc -> vf610-colibri, 從’pinctrl_additionalgpio’裡面刪除對應GPIO管腳

pinctrl_additionalgpio: additionalgpios {

                  fsl,pins = <

VF610_PAD_PTC4__GPIO_49              0x22ed

……

>;

};

//在’pinctrl_dspi1‘中新增對應的管腳

pinctrl_dspi1: dspi1grp {

                        fsl,pins = <

VF610_PAD_PTD4__DSPI1_CS1                 0x33e2

                        >;

};

//最後再為新的slave device新增slave node

&dspi1 {

        spidev1: [email protected] {

                compatible = "spidev";

                reg = <0>;

                spi-max-frequency = <50000000>;

        };

Spidev2: [email protected] {

                compatible = "spidev";

                reg = <1>;

                spi-max-frequency = <50000000>;

        };

};

b). 採用GPIO作為CS管腳

參考文件請見這裡,下面是一個簡單舉例

./ 修改Device Tree SPI master node 引數

    //增加cs-gpio 屬性,定義GPIO CS管腳或者GPIO和硬體CS混合,如下面所示SPI1_PCS0和另外三個GPIO混合組成新定義的CS組合

&dspi1 {

        cs-gpios = <0> <&gpio1 14 0> <&gpio1 15 0> <&gpio1 16 0>;

};

這樣重新定義的CS片選組合為4個,順序如下:

CS0: SPI1_PCS0

CS1: &gpio1 14

CS2: &gpio1 15

CS3: &gpio1 16

./ 修改&iomuxc -> vf610-colibri,將所需的CS GPIO從GPIOs Pinctrl刪除,並加入SPI1 Pinctrl。

//從’pinctrl_additionalgpio’裡面刪除上面三個GPIO管腳

pinctrl_additionalgpio: additionalgpios {

         fsl,pins = <

VF610_PAD_PTC1__GPIO_46                 0x22ed

VF610_PAD_PTC2__GPIO_47                 0x22ed

VF610_PAD_PTC3__GPIO_48                 0x22ed

……

>;

};

//然後再新增到’pinctrl_dspi1‘

pinctrl_dspi1: dspi1grp {

                        fsl,pins = <

VF610_PAD_PTC1__GPIO_46               0x33e2

VF610_PAD_PTC2__GPIO_47               0x33e2

VF610_PAD_PTC3__GPIO_48               0x33e2

                        >;

};

//最後再為每個slave device新增slave node

&dspi1 {

        spidev1: [email protected] {

                compatible = "spidev";

                reg = <0>;

                spi-max-frequency = <50000000>;

        };

Spidev2: [email protected] {

                compatible = "spidev";

                reg = <1>;

                spi-max-frequency = <50000000>;

        };

……

};

3). 將上述修改好的Device Tree 檔案重新編譯後部署到VF61裝置裡面,就完成了多個SPI裝置掛載,可以在應用中使用了。

a). 編譯部署除了本文一開始提到的文章,也可以參考這裡

b). Embedded Linux 下 SPI裝置呼叫請參考這裡

相關推薦

ARM平臺嵌入式LinuxSPI裝置連線

在嵌入式ARM平臺裝置上,經常有在一個SPI bus上面掛接一個或者多個SPI裝置的需求,由於掛載一個裝置的情況比較簡單,本文主要就在嵌入式Linux環境下掛載多個SPI裝置進行說明。 本文所採用的硬體為Toradex 公司Colibri VF61計算機模組和開發載板,

ARM平臺嵌入式Linux使用3G/4G 模組

簡介 隨著工業發展,嵌入式裝置接入網路的需求日益增多,在沒有有線或者無線乙太網的環境下,直接通過3G/4G Modem連線運營商網路來接入網際網路不失為一個好方法,本文就著重介紹基於ARM平臺的嵌入式裝置在Embedded Linux下使用3G/4G Modem的方法。 目

嵌入式ARM平臺基於Linux配置應用程式開機自啟動(fluxbox參考)

本文轉載於 http://www.eefocus.com/toradex/blog/18-01/426601_a6317.html,特此感謝 By Toradex秦海 1). 簡介 嵌入式ARM平臺裝置採用Embedded Linux作業系統

LinuxSPI和IIC驅動免在裝置樹上新增裝置資訊的編寫方法

      編寫i2c或spi驅動時,一般需要往裝置樹上(或者板級檔案)新增節點資訊,這裡提供一種直接在驅動中新增裝置資訊的方法,使驅動更方便移植。 i2c的驅動模板如下 #include <linux/module.h> #include <linux

LinuxSPI裝置驅動的編寫

 SPI(Serial Peripheral Interface) 是一個同步的四線制序列線,用於連線微控制器和感測器、儲存器及外圍裝置。三條訊號線持有時鐘訊號(SCLK,經常在10MHz左右)和並行資

嵌入式ARM平臺基於Linux配置24bit RGB輸出

By Toradex秦海 1). 簡介 嵌入式ARM平臺裝置採用Embedded Linux作業系統進行開發已經越來越成為主流,本文就著重演示在EmbeddedLinux下配置24bit RGB LCD顯示。 本文所演示的平臺來自於ToradexColibri iMX6

嵌入式ARM平臺基於Linux配置應用程式開機自啟動

By Toradex秦海 1). 簡介 嵌入式ARM平臺裝置採用Embedded Linux作業系統進行開發已經越來越成為主流,本文就著重說明在EmbeddedLinux下配置應用程式開機自啟動的方法,並就基於Qt的應用程式卡機自啟動指令碼的配置進一步說明。 本文所演示的

嵌入式LinuxQt的中文顯示

tdi IT too file ron main.c nts 環境變量 copy 一般情況下,嵌入式Qt界面需要中文顯示,下面總結自己在項目中用到的可行的辦法 1,下載一種中文簡體字體,比如我用的是”方正準圓簡體“,把字體文件放在ARM開發板系統的Qt字庫中,即/usr/l

linuxspi-nor Flash的操作----備份與還原norflash中的uboot

一、環境: Ubuntu 16.02 nor flash型號: spi nor flash S25FL256S ,Sector Size = 64 kbytes,  total size = 256M BIT = 32M Bytes 一、備份: dd if=/dev/mtd

linux系統裝置的基本管理

更改磁碟分割槽方式 parted /dev/vdb 進入parted命令列,可以輸入help(兩次點選Tab)幫助檢視命令 ;輸入mklabel,選擇標籤型別gpt(msdos是我電腦原來的分割槽方式),回覆Yes確定繼續,完成後輸入quit退出 man parted 可以看到詳細

Linux c語言連線與操作MYSQL

1.安裝mysql 2.安裝mysql.h函式庫 sudo apt-get install libmysqlclient-dev 3. mysql_real_connect() 連線一個mysql伺服器  語法如下 MYSQL *mysql_real_connect

Linux通過rdesktop連線Windows遠端桌面

rdesktop是linux下支援Windows遠端桌面連線的客戶端程式,在linux系統下可通過它遠端訪問Windows桌面,支援多種版本。rdesktop是sourceforge下支援GPL協議的一個開源專案,採用RDP(Remote Desktop Protocol,遠端桌面協議),幾乎可以連線wind

Linux學習筆記-Linux裝置檔案

在Linux下,有一種檔案的型別叫裝置檔案。 在/dev目錄下的檔案基本上都是裝置檔案,檔案屬性以c或b打頭(charactor, block)   裝置檔案用於代表一個物理裝置 例如,音效卡、顯示卡、鍵盤、滑鼠、攝像頭、印表機、掃描器。  

LVGUI在嵌入式LINUX的編譯

    本文比較亂,算是一個隨筆,記錄一下將LVGUI交叉編譯到MIPS架構的嵌入式Linux裝置中,主要關於自己編寫對應的makefile來對LVGUI進行編譯。 首先,Makefile 最好和lv的幾個工程目錄在同一目錄下,如下圖: 其次,為了讓標頭檔案(h檔

Linux使用openVPN連線到某個內網

推薦一個網站(比較全的介紹關於openvpn的客戶端與服務端的配置) 點選我 此處我介紹我配置openvpn客戶端連線的坑 我的機器為kali linux apt-get install openvpn 上面就是裝好了客戶端的 下面就是連線 openvpn --config xxx.opvn [--de

linux安裝git連線githup,克隆專案

安裝 yum install git 檢查 git version 設定賬號和授權證書: git config --global user.name "使用者名稱" git config --global user.email "郵箱" ssh-keygen -t

Linux的C#連線Mysql資料庫

今天在嘗試在 Linux 系統下使用C#連線資料庫,發現網上這方面的資訊很少,所以就寫一篇部落格記錄一下。 Linux下這裡使用的是mono。 首先是缺少Mysql.Data.dll這個庫的,所以需要安裝 https://dev.mysql.com/downloads/connector/net/ 安

嵌入式LinuxCAN匯流排配置

題背景:本人開發板使用的是迅為iTOP4412精英版,額外購買的CAN/485模組,如下圖:   但是插上模組之後,在終端使用ifconfig can0命令發現開發板讀不到CAN裝置,顯示“ifconfig: SIOCGIFFLAGS: No such device”。如下圖:   在重新配置核心後,可以讀出

qt開啟linux裝置節點

#include <stdlib.h>  //包含標頭檔案 #define IOCTL_LED_ON  0 #define IOCTL_LED_OFF 1 int led_fd=0; int led_open(const char *devname) //定義

如何提高Linux裝置IO的整體效能?

編輯手記:本文主要講解Linux IO排程層的三種模式:cfp、deadline和noop,並給出各自的優化和適用場景建議。 作者簡介: 鄒立巍 Linux系統技術專家。目前在騰訊SNG社交網路運營部 計算資源平臺組,負責內部私有云平臺的建設和架構規劃設計。 曾任新浪動態應用平臺系統架構師,負責微