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平臺嵌入式Linux下SPI裝置連線
在嵌入式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作業系統
Linux下SPI和IIC驅動免在裝置樹上新增裝置資訊的編寫方法
編寫i2c或spi驅動時,一般需要往裝置樹上(或者板級檔案)新增節點資訊,這裡提供一種直接在驅動中新增裝置資訊的方法,使驅動更方便移植。 i2c的驅動模板如下 #include <linux/module.h> #include <linux
Linux下SPI從裝置驅動的編寫
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的應用程式卡機自啟動指令碼的配置進一步說明。 本文所演示的
嵌入式Linux下Qt的中文顯示
tdi IT too file ron main.c nts 環境變量 copy 一般情況下,嵌入式Qt界面需要中文顯示,下面總結自己在項目中用到的可行的辦法 1,下載一種中文簡體字體,比如我用的是”方正準圓簡體“,把字體文件放在ARM開發板系統的Qt字庫中,即/usr/l
linux下spi-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/ 安
嵌入式Linux下CAN匯流排配置
題背景:本人開發板使用的是迅為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社交網路運營部 計算資源平臺組,負責內部私有云平臺的建設和架構規劃設計。 曾任新浪動態應用平臺系統架構師,負責微