在Zynq 7000平臺上使用Linux spidev.c驅動

在上一篇博客中,介紹瞭如何配置Vivado下的硬件工程、例化SPI硬件接口和如何使用petalinux加載Xilinx提供的SPI總線驅動,如果要通過SPI控制外部器件,還需要添加SPI的設備驅動以實現SPI的對外控制邏輯。

在Linux內核的driver/spi目錄下有許多外設的設備驅動可以參考,這篇博客主要介紹如何使用其中的spidev,c這個設備驅動來實現對外設的控制。

spidev是一個通用的SPI外設驅動,它提供了spi字符驅動的註冊,並向上層應用程序提供了I/O控制接口,當我們僅需要利用SPI接口向外設發送和接收簡單的控制序列時,可直接使用該驅動,下面介紹具體的使用方法。

一、在前一篇博客中,我們採用xilinx針對Zynq 7000處理器提供的spi-cadence.c驅動實現了芯片上SPI總線驅動的註冊,接下來需要修改設備樹文件以時我們的外設掛接在SPI總線下。

在petalinux工程的../subsystems/linux/configs/device-tree目錄下找到zynq相關的設備樹文件,目錄所包含的文件如下圖所示。


打開其中的zynq-7000.dtsi文件,找到其中的spi0節點(具體使用spi0還是spi1根據硬件工程的配置情況),並在該節點下添加如下內容:


其中 “spidev”名字對應spidev.c文件中的驅動名,Linux系統啓動時會自動找到對應的驅動模塊並加載。

reg<0>對應SPI下的第幾個設備,由於Zynq PS端的SPI控制器每個可以外接控制3個從設備,所以reg的值可以設爲0、1或2.

由於在上一篇博客中,Vivado硬件工程中對SPI的接口spi0_csn_0_o進行了例化並引出接口,所以本工程使用的是SPI使能第0個端口。

同時,spidev.c該驅動不支持片選功能,因此若在spi0下掛接了多個從設備,切硬件工程中spi0_csn_0片選接口引出了多個,則spiddev驅動在註冊時,會在/dev目錄下注冊多個設備,分別對應每個片選接口連接的從設備。

設備樹文件修改保存後,利用petalinux-config -c kernel指令,在devices driver/spi support目錄下,選中user mode SPI device driver support,然後重新編譯內核並啓動系統,即可在/dev目錄下看到註冊的一個SPI字符設備,一般命名爲SPI x.x。

在應用層編寫程序通過該驅動控制外設,可參考/opt/petalinux-v2015.4-final/components/linux-kernel/xlnx-4.0/Documentation/spi目錄下的spi_test.c程序。

使用該程序,將SPI的MOSI和MISO引腳短接,即可自收自發數據了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章