一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

怎么樣利用AXI Quad SPI快速打通Linux至PL端SPI從設備?

FPGA之家 ? 來源:CSDN技術社區(qū) ? 作者:嵌入式客棧 ? 2021-04-09 17:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

[導讀] 前面寫過篇介紹ZYNQ基本情況的文章,今天來肝一篇實戰(zhàn)文章介紹AXI quad SPI 使用方法,如果你正使用ZYNQ的這個IP,希望對你有所幫助。

初識AXI quad SPI

f25d2ec4-990e-11eb-8b86-12bb97331649.png

自《PG153 AXI Quad SPI v3.2》

支持:

Legacy Mode

standard mode: 準SPI通常就稱SPI,它是一種串行外設接口規(guī)范,有4根通信腳:SCK (時鐘), CS(片選), MOSI(主出從入), MISO(主入從出)。

Dual/Quad SPI Mode:

f269a73a-990e-11eb-8b86-12bb97331649.png

AXI QuadSPI 模式

在標準模式下,支持高達32個從站,這是非常靈活的指標。本文對于手冊中的詳細技術細節(jié)不做過多闡述,有興趣的自行深入閱讀研究。

該SPI IP能干神馬呢?

完成如下這樣一個應用場景:

f2ac0864-990e-11eb-8b86-12bb97331649.png

SPI IP訪問多從SPI芯片

所需要實現(xiàn)的需求用例為:

f2e1edbc-990e-11eb-8b86-12bb97331649.png

本文實現(xiàn)用例描述

利用AXI quad SPI 實現(xiàn)SPI外設控制器

實現(xiàn)SPI外設控制器驅動

實現(xiàn)多SPI從設備掛載在SPI總線

實現(xiàn)用戶空間訪問多從SPI物理從設備

從軟件分層的視角來看,上述的需求需要實現(xiàn)下面的訪問層級:

f30a8b32-990e-11eb-8b86-12bb97331649.png

PS/PL軟硬件層次架構圖

為什么要研究這個呢?實際用ZYNQ芯片做產(chǎn)品時,很有可能外部有多個SPI從設備芯片需要利用Linux訪問,你或許會說ZYNQ的PS端不是自帶了兩個SPI控制器嗎?但有時候項目中這兩個SPI對應的引腳可能用做其他用途了,而一個復雜的項目中又不得不使用多個SPI從設備芯片時,本文所討論的話題就能很好的解決這樣的需求場景了。通過本文,你會發(fā)現(xiàn),原來ZYNQ的SPI IP是如此靈活好用!

本文目的實戰(zhàn)描述,如何一步一步從PL端設計:

block design

約束

綜合

導出

乃至PS端:

SPI驅動配置

設備樹修改

系統(tǒng)編譯部署

設備驅動測試

按照這個流程,那么第一步需要設計PL端與PS端的配置,且看:

AXI Quad SPI 之配置

從IP catalog中按下圖從ip庫中添加如下IP:

ZYNQ7 processing System

AXI interconnect

AXI Quad SPI(可根據(jù)需要添加多個)

Processing System Reset(添加ZYNQ7 processing System 點自動連線會自動添加,當然也可以手動添加)

Concat

f3450aa0-990e-11eb-8b86-12bb97331649.png

Block設計圖

使能ZYNQ7 processing System的時鐘PL Fabric clocks,用以驅動PL端的IP:

f38dc678-990e-11eb-8b86-12bb97331649.png

PL Fabric clocks設置

使能M AXI GP0接口如下:

f3ddadf0-990e-11eb-8b86-12bb97331649.png

M AXI GP0設置

雙擊AXI interconnect,設置2主1從:

f41cf5d2-990e-11eb-8b86-12bb97331649.png

AXI interconnect設置

雙擊axi_quad_spi_0設置如下,設置4個從設備(最多可支持32個從設備,PS端內(nèi)置的SPI控制器1個最多支持3個從設備,從這一點可看出該IP的靈活性)

f44f9ee2-990e-11eb-8b86-12bb97331649.png

axi_quad_spi設置

同樣將axi_quad_spi_1設置為2個從設備接口。

然后按照前面的連線圖,將各塊連接好,做過硬件的盆友會比較適應,這就像畫原理圖一樣,就將各IP建立了邏輯連接關系了。除此之外,對于一個ZYNQ的板子而言,你還需要做如下的PS端設置:

DDR RAM設置,根據(jù)自身的板子的內(nèi)存芯片以及內(nèi)存大小進行設置

Peripheral IO外設設置,比如SD卡,UART,QUAD SPI Flash,erthernet等

clock時鐘系統(tǒng)設置,根據(jù)板子的情況進行設置CPU、DDR時鐘頻率、IO時鐘等

......

至于這些怎么配置,比較常見這里就不贅述了。

對于AXI quad SPI外設還有一個很重要的配置,就是其地址范圍:

f4786c50-990e-11eb-8b86-12bb97331649.png

AXI quad SPI地址設置

該地址最終將導出到設備樹描述文件,用于SPI控制器驅動訪問,從而讓SPI控制器驅動得以與該IP通過AXI總線進行通信。

導出硬件文件

點擊open elaborated design ,然后打開io ports進行管腳分配,這需要根據(jù)各自的硬件實際情況進行設置,比如我是這樣設置的:

f49cfaac-990e-11eb-8b86-12bb97331649.png

管腳約束設置

電平標準

是否上拉

驅動能力

.....

然后點擊Run synthesis進行綜合,成功之后點擊生成bit stream。再點擊export hardware,得到.hdf文件,這個文件用于構建內(nèi)核。

f4e1be1c-990e-11eb-8b86-12bb97331649.png

導出硬件描述文件

將得到的硬件描述hdf文件以及bitstream文件拷貝至內(nèi)核編譯文件夾下:

f5297810-990e-11eb-8b86-12bb97331649.png

硬件描述及bit文件

配置編譯內(nèi)核

運行命令讀取硬件描述文件:

petalinux-config--get-hw-description../base.sdk

注:這里將hdf文件以及.bit文件放置在petalinux編譯路徑的上級目錄的base.sdk,根據(jù)習慣可自行設置,只有上述命令傳入的路徑正確即可。

等待一段時間后,可得到一個配置界面,用于配置內(nèi)核源、u-boot源、Image 等配置。

f546d3a6-990e-11eb-8b86-12bb97331649.png

petalinux-config

根據(jù)實際情況配置好后,退出配置并保存配置。使用過的會比較熟悉,這里不贅述了。

配置設備樹

編輯用戶設備樹文件,用戶設備樹文件在下面路徑中:

./project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

配置設備樹如下:

/include/"system-conf.dtsi" /{ }; &axi_quad_spi_0{ status="okay"; clock-names="axi_clk","axi4_clk","spi_clk"; clocks=<&clkc?15>,<&clkc?15>,<&clkc?15>; spi0_dev_0@0{ compatible="spidev"; reg=<0>; spi-max-frequency=<500000>; #address-cells=<1>; #size-cells=<1>; }; spi0_dev_1@1{ compatible="spidev"; reg=<1>; spi-max-frequency=<500000>; #address-cells=<1>; #size-cells=<1>; }; spi0_dev_2@2{ compatible="spidev"; reg=<2>; spi-max-frequency=<500000>; #address-cells=<1>; #size-cells=<1>; }; spi0_dev_3@3{ compatible="spidev"; reg=<3>; spi-max-frequency=<500000>; #address-cells=<1>; #size-cells=<1>; }; }; &axi_quad_spi_1{ status="okay"; clock-names="axi_clk","axi4_clk","spi_clk"; clocks=<&clkc?15>,<&clkc?15>,<&clkc?15>; spi1_dev_0@0{ compatible="spidev"; reg=<0>; spi-max-frequency=<500000>; #address-cells=<1>; #size-cells=<1>; }; spi1_dev_1@1{ compatible="spidev"; reg=<1>; spi-max-frequency=<500000>; #address-cells=<1>; #size-cells=<1>; }; };

這里直接使用內(nèi)置spidev兼容從設備驅動,當然如果需要自己定義一個SPI設備驅動也是非常容易的,但是對于大部分普通的SPI從芯片而言直接使用spidev設備驅動即可,只需要在讀寫時按照芯片手冊協(xié)議進行訪問即可。

配置內(nèi)核

運行下面命令進行內(nèi)核配置:

petalinux-config-ckernel

f5720d1e-990e-11eb-8b86-12bb97331649.png

內(nèi)核配置

對于本應用而言,需要配置SPI驅動:

DeviceDrivers---> +-SPIsupport--->

配置如下:

f5956458-990e-11eb-8b86-12bb97331649.png

SPI控制器及設備驅動配置

這里調試中遇到一個奇怪的問題,CONFIG_SUSPEND需要禁止,否則控制器驅動加載不成功,目前還沒有深入研究為什么不成功,猜想可能是主控制器驅動關于SUSPEND功能還不支持或者有bug,如果有哪位大神知道怎么解決請求留言指點。

Powermanagementoptions---> SuspendtoRAMandstandby

f5a3bbb6-990e-11eb-8b86-12bb97331649.png

功能管理配置

退出并保存配置,然后運行下面命令編譯系統(tǒng):

petalinux-build

等待編譯成功后,運行下面命令將bitstream文件包進BOOT.bin中。

petalipackage--boot--fsbl./images/linux/zynq_fsbl.elf--fpga../base.sdk/design_1_wrapper.bit--u-boot--force

將得到下面的輸出信息,表示操作成功:

INFO:FileinBOOTBIN:"/home/zynq/ALINX/spi_ip/ax_peta/images/linux/zynq_fsbl.elf" INFO:FileinBOOTBIN:"/home/zynq/ALINX/spi_ip/base.sdk/design_1_wrapper.bit" INFO:FileinBOOTBIN:"/home/zynq/ALINX/spi_ip/ax_peta/images/linux/u-boot.elf" INFO:GeneratingzynqbinarypackageBOOT.BIN... INFO:Binaryisready. WARNING:UnabletoaccesstheTFTPBOOTfolder/tftpboot!!! WARNING:SkipfilecopytoTFTPBOOTfolder!!!

注:/home/zynq/ALINX/spi_ip/ax_peta 是本文工程的目錄

測試SPI從設備

編寫驅動測試程序,代碼如下:

#include #include #include #include intmain(intargc,char**argv) { intfd; intlen; unsignedcharbuf[10]; unsignedchartmp; /*驗證輸入?yún)?shù)個數(shù)*/ if(3!=argc) { printf("nonepara "); return-1; } /*打開輸入的設備文件,獲取文件句柄*/ fd=open(argv[1],O_RDWR); if(fd='0'&&argv[2][i]<='9') ????????{ ????????????tmp?=?argv[2][i]?-?'0'; ????????} ????????else?if(argv[2][i]>='a'&&argv[2][i]<='f') ????????{ ????????????tmp?=?argv[2][i]?-?'a'+10; ????????} ????????else?if(argv[2][i]>='A'&&argv[2][i]<='F') ????????{ ????????????tmp?=?argv[2][i]?-?'A'+10; ????????} ????????else ????????{ ????????????printf("Invalid?input?parameters? "); ????????????return?-1; ????????} ????????if(i%2==0) ???????????buf[j]?=?tmp<<4; ????????else ????????{ ????????????buf[j]?+=?tmp; ????????????j++; ????????} ????} ????len?=?j; ????printf("Test?wr:"); ????for(i=0;i

編譯:arm-linux-gnueabihf-gcctest.c-otest

將編譯所得的BOOT.BIN以及image.ub文件拷貝至制作好的SD的BOOT區(qū),test文件拷貝至/home下。然后插上SD卡上電運行電路板:

登錄控制臺后,運行l(wèi)s /dev查看spidev設備是否加載成功:

f5d4c620-990e-11eb-8b86-12bb97331649.png

spidev設備掛載情況

可見spedev1.0、spidev1.1以及spidev2.0--spidev2.3加載成功,與預期一樣。

然后運行測試程序:

root@ax_peta:/run/media/mmcblk0p2/home#./test/dev/spidev1.078aa Testwr:78aa

示波器或者邏輯分析儀觀察對應引腳,將出現(xiàn)正確的SPI通信波形。

總結一下

至此,就基本實現(xiàn)了從PS端Linux用戶空間訪問PL端的SPI從設備了。當然實際項目中還有很多細節(jié)需要進一步研究:

CPOL/CPHA 組合四種模式設置

SPI通信速率設置

從設備應用協(xié)議程序編寫

AXI Quad SPI FIFO特性的深入應用

AXI Quad SPI 其他模式及細節(jié)研究等

對于這些更細節(jié)的內(nèi)容,相信在將基本框架搭建成功后,只要深入細致研究都不會有太大的難度。從本文可看出,ZYNQ之所以如此靈活好用,是其廠家或者第三方提供了大量成熟可供使用的IP以及配套的驅動程序。如有興趣嘗試用來開發(fā)項目,相信你會很快喜歡上這個體系的芯片,真的可以做到片上即可實現(xiàn)系統(tǒng)這一目標!

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1804

    瀏覽量

    96048
  • CS
    CS
    +關注

    關注

    0

    文章

    55

    瀏覽量

    25090
  • AXI
    AXI
    +關注

    關注

    1

    文章

    136

    瀏覽量

    17265

原文標題:【ZYNQ實戰(zhàn)】利用AXI Quad SPI快速打通Linux至PL端SPI從設備

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    請問BTSDK3.1是否支持cyw20719B2 Quad SPI功能?

    請問,BTSDK3.1是否支持cyw20719B2 Quad SPI功能?
    發(fā)表于 07-08 08:05

    請問Modus Toolbox 中如何設置CYW20719B2的Quad SPI接口?

    請問Modus Toolbox 中如何設置CYW20719B2的Quad SPI接口? 我利用下圖方法 打開了wiced_btsdk下的design.modus文件,并配置了SPI1
    發(fā)表于 07-08 06:09

    能否提供Linux下USB轉SPI模式的測試程序?

    我已在 Linux 上成功配置了 CY7C65211 器件,使其在 USB 轉 SPI 模式下運行。 使用 lsusb 命令,設備顯示如下:總線 003 設備 002:ID 04b4:
    發(fā)表于 05-22 06:16

    基于RK3576開發(fā)板的SPI使用說明

    ,完全可以不必理會SPI協(xié)議的詳細規(guī)定。只需要按照驅動層提供給我們的操作SPI外設的操作接口函數(shù)就可以像操作linux中其他普通設備文件那樣輕松的操作
    的頭像 發(fā)表于 05-07 10:31 ?765次閱讀
    基于RK3576開發(fā)板的<b class='flag-5'>SPI</b>使用說明

    Java的SPI機制詳解

    作者:京東物流 楊葦葦 1.SPI簡介 SPI(Service Provicer Interface)是Java語言提供的一種接口發(fā)現(xiàn)機制,用來實現(xiàn)接口和接口實現(xiàn)的解耦。簡單來說,就是系統(tǒng)只需要定義
    的頭像 發(fā)表于 03-05 11:35 ?792次閱讀
    Java的<b class='flag-5'>SPI</b>機制詳解

    iic協(xié)議與spi協(xié)議的區(qū)別

    I2C協(xié)議與SPI協(xié)議的區(qū)別 1. 通信方式 I2C :是一種多主機、多機的通信協(xié)議,使用兩條線(數(shù)據(jù)線SDA和時鐘線SCL)進行通信。 SPI :是一種主從模式的通信協(xié)議,通常使用四條線(主輸出
    的頭像 發(fā)表于 02-05 11:28 ?3275次閱讀

    迅為RK3568開發(fā)板驅動指南Linux中通用SPI設備驅動

    迅為RK3568開發(fā)板驅動指南Linux中通用SPI設備驅動
    的頭像 發(fā)表于 01-23 11:02 ?2853次閱讀
    迅為RK3568開發(fā)板驅動指南<b class='flag-5'>Linux</b>中通用<b class='flag-5'>SPI</b><b class='flag-5'>設備</b>驅動

    EE-177:SHARC SPI機引導

    電子發(fā)燒友網(wǎng)站提供《EE-177:SHARC SPI機引導.pdf》資料免費下載
    發(fā)表于 01-08 15:10 ?0次下載
    EE-177:SHARC <b class='flag-5'>SPI</b><b class='flag-5'>從</b>機引導

    KeyStone架構串行外設接口(SPI)手冊

    )、MOSI(主設備輸出設備輸入線)、MISO(主設備輸入設備輸出線)和CS/SS(片選線)
    發(fā)表于 12-16 10:33 ?0次下載

    SPI的通信問題

    請問一下各位大佬我的主控工作頻率是16m 選擇的一塊eeprom標的頻率是80m它倆工作頻率不一可以通過spi通信嗎spi的工作頻率是由主設備決定的還是主
    發(fā)表于 11-22 19:00

    spi master接口的fpga實現(xiàn)

    前言 當你器件的引腳賊少的時候,需要主機和機通信,spi就派上了用場,它可以一對多,但只是片選到的機能和主機通信,其他的掛機。 spi:serial peripheral inte
    的頭像 發(fā)表于 11-16 10:35 ?1197次閱讀
    <b class='flag-5'>spi</b> master接口的fpga實現(xiàn)

    物聯(lián)網(wǎng)行業(yè)存儲方案詳解_SPI NOR Flash

    SPI NOR FLASH存儲器在初始響應和啟動時提供高可靠性,并具有低時延。這一特性對于物聯(lián)網(wǎng)設備至關重要,因為物聯(lián)網(wǎng)設備通常需要快速啟動并穩(wěn)定運行,以確保數(shù)據(jù)的實時傳輸和處理。
    的頭像 發(fā)表于 09-24 14:39 ?1143次閱讀
    物聯(lián)網(wǎng)行業(yè)存儲方案詳解_<b class='flag-5'>SPI</b> NOR Flash

    利用Tl的智能高端開關實現(xiàn)SPI通信

    電子發(fā)燒友網(wǎng)站提供《利用Tl的智能高端開關實現(xiàn)SPI通信.pdf》資料免費下載
    發(fā)表于 09-24 09:28 ?0次下載
    <b class='flag-5'>利用</b>Tl的智能高端開關實現(xiàn)<b class='flag-5'>SPI</b>通信

    SPI總線的定義和特點

    SPI總線(Serial Peripheral Interface),全稱為串行外圍設備接口,是由Motorola公司提出并定義的一種同步、串行、高速的通信總線。SPI總線以其獨特的優(yōu)勢在電子通信
    的頭像 發(fā)表于 09-03 14:05 ?2178次閱讀

    BQ79600(UART/SPI菊花鏈網(wǎng)橋IC)的安全手冊

    電子發(fā)燒友網(wǎng)站提供《BQ79600(UART/SPI菊花鏈網(wǎng)橋IC)的安全手冊.pdf》資料免費下載
    發(fā)表于 08-30 11:35 ?2次下載
    BQ79600(UART/<b class='flag-5'>SPI</b><b class='flag-5'>至</b>菊花鏈網(wǎng)橋IC)的安全手冊