色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

FPGA之家 ? 來源:CSDN技術社區 ? 作者:嵌入式客棧 ? 2021-04-09 17:45 ? 次閱讀

[導讀] 前面寫過篇介紹ZYNQ基本情況的文章,今天來肝一篇實戰文章介紹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,它是一種串行外設接口規范,有4根通信腳:SCK (時鐘), CS(片選), MOSI(主出從入), MISO(主入從出)。

Dual/Quad SPI Mode:

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

AXI QuadSPI 模式

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

該SPI IP能干神馬呢?

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

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

SPI IP訪問多從SPI芯片

所需要實現的需求用例為:

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

本文實現用例描述

利用AXI quad SPI 實現SPI外設控制器

實現SPI外設控制器驅動

實現多SPI從設備掛載在SPI總線

實現用戶空間訪問多從SPI物理從設備

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

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

PS/PL軟硬件層次架構圖

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

本文目的實戰描述,如何一步一步從PL端設計:

block design

約束

綜合

導出

乃至PS端:

SPI驅動配置

設備樹修改

系統編譯部署

設備驅動測試

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

AXI Quad SPI 之配置

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

ZYNQ7 processing System

AXI interconnect

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

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端內置的SPI控制器1個最多支持3個從設備,從這一點可看出該IP的靈活性)

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

axi_quad_spi設置

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

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

DDR RAM設置,根據自身的板子的內存芯片以及內存大小進行設置

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

clock時鐘系統設置,根據板子的情況進行設置CPU、DDR時鐘頻率、IO時鐘等

......

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

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

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

AXI quad SPI地址設置

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

導出硬件文件

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

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

管腳約束設置

電平標準

是否上拉

驅動能力

.....

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

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

導出硬件描述文件

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

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

硬件描述及bit文件

配置編譯內核

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

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

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

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

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

petalinux-config

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

配置設備樹

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

./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>; }; };

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

配置內核

運行下面命令進行內核配置:

petalinux-config-ckernel

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

內核配置

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

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

配置如下:

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

SPI控制器及設備驅動配置

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

Powermanagementoptions---> SuspendtoRAMandstandby

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

功能管理配置

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

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; /*驗證輸入參數個數*/ 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區,test文件拷貝至/home下。然后插上SD卡上電運行電路板:

登錄控制臺后,運行ls /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

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

總結一下

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

CPOL/CPHA 組合四種模式設置

SPI通信速率設置

從設備應用協議程序編寫

AXI Quad SPI FIFO特性的深入應用

AXI Quad SPI 其他模式及細節研究等

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

編輯:jq

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

    關注

    17

    文章

    1711

    瀏覽量

    91748
  • CS
    CS
    +關注

    關注

    0

    文章

    54

    瀏覽量

    24544
  • AXI
    AXI
    +關注

    關注

    1

    文章

    128

    瀏覽量

    16647

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

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

收藏 人收藏

    評論

    相關推薦

    EE-177:SHARC SPI機引導

    電子發燒友網站提供《EE-177:SHARC SPI機引導.pdf》資料免費下載
    發表于 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(片選線)
    發表于 12-16 10:33 ?0次下載

    SPI的通信問題

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

    利用Tl的智能高端開關實現SPI通信

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

    請問CYW20829能否通過Quad SPI連接固件、用戶數據和Quad SPI SRAM?

    我計劃在下圖所示的配置中使用 CYW20829。 是否可以使用 Quad SPI 連接固件、用戶數據和 Quad SPI SRAM?
    發表于 07-03 06:25

    請問ESP32-S3R8是否可以使用Quad SPI的Flash?

    手冊上標注其合封PSRAM為Octal SPI,外部flash時是否可以使用Quad SPI接口?是否需要額外的配置,對其選型有什么要求? 另外,外部PSRAM是否有推薦的型號或具體選型規格?我想評估一下成本怎樣組合比較合適,謝
    發表于 07-01 06:44

    使用ESP32C3的SPI2的時候,配置SPI接口后,SPI接口讀取設備的數據的時候會整體左偏移一bit,為什么?

    使用ESP32C3的SPI2的時候,配置SPI接口后,發現SPI接口讀取設備的數據的時候會整體左偏移一bit,
    發表于 06-20 06:55

    ESP32-C3作為SPI主機與機通訊,SPI切換為GPIO功能后無法再切換SPI功能了怎么解決?

    我的需求是ESP32-C3作為SPI主機與機通訊,通訊完成后SPI管腳切換為普通GPIO用于其他功能,待下次需要與機通訊時再切換為主機SPI
    發表于 06-06 06:49

    Vision Board上的SPI設備驅動配置和SPI主控的外部loopback功能測試

    感謝發燒友/* attach spi device */static int rt_spi_device_init(void){ ? ?struct rt_spi_configuration cfg
    的頭像 發表于 06-04 09:21 ?647次閱讀
    Vision Board上的<b class='flag-5'>SPI</b><b class='flag-5'>設備</b>驅動配置和<b class='flag-5'>SPI</b>主控的外部loopback功能測試

    有關PL利用AXI總線控制PSDDR進行讀寫(機wready信號一直不拉高)

    一直拉高的。這與寫數據通道好像有點區別。 我不清楚PS 的DDR到底發生了什么,但是和MIG核就是有點不一,通過仿真MIG核可以發現,PL的DDR是會先一直發出wready信號的
    發表于 05-31 12:04

    讓STM32的SPI設備設備讀取數據時遇到的疑問求解

    STM32的SPI在作為主設備,與一個帶有SPI接口的AD芯片通信。 時鐘,相位都配置的對,數據位配置為8位。 我想問一下:在STM32的SPI
    發表于 05-16 07:50

    STM32H7的Octo-SPI或者Quad-SPI能否支持讀取ADC的數據?

    ADC使用的AD7380.2通道4M的同步ADC。 SPI接口需要使用2個數據接收引腳 和一個數據輸出引腳。等于是三根數據線。 普通的SPI只有兩根線。Quad-SPI看描述說一般用于FLASH。 如果使用Octo-
    發表于 04-01 06:10

    請問QUAD SPI是否支持SD卡?

    如題,單線SPI讀取SD卡肯定沒有4線讀取的速率快,問題是STM32某些芯片沒有SDIO引腳,但是有QUAD SPI,不知道是否能4線驅動SD卡呢?
    發表于 03-25 06:34

    ModusToolbox中如何設置CYW20719B2的Quad SPI接口?

    您好, 請問Modus Toolbox 中如何設置CYW20719B2的Quad SPI接口? 我利用下圖方法 打開了wiced_btsdk下的design.modus文件,并配置了SPI
    發表于 03-01 11:16

    超詳細的SPI原理和通信模式

    SPI分為主、兩種模式,一個SPI通訊系統需要包含一個(且只能是一個)主設備,一個或多個設備
    發表于 02-29 12:33 ?4722次閱讀
    超詳細的<b class='flag-5'>SPI</b>原理和通信模式
    主站蜘蛛池模板: md2.pud 麻豆传媒官网| 精品国产乱码久久久久久免费流畅| 精品视频中文字幕| 伊人网站在线| 美国caopo超碰在线视频| 被老总按在办公桌吸奶头| 无遮挡h肉3d动漫在线观看| 精品国产在线国语视频| 97人妻久久久精品系列A片| 日本xxxx19| 国产原创中文视频| 970女主播电台歌曲| 日日噜噜夜夜狠狠扒开双腿| 国产三区在线成人AV| 最近的中文字幕免费完整| 日韩丰满少妇无码内射| 后入式狂顶免费视频| 99久久综合国产精品免费| 午夜不卡av免费| 美女叉腿掰阴大胆艺术照| 各种肉黄浪荡故事集| 正在播放国产尾随丝袜美女| 乳女教师欲乱动漫无修版动画 | 无人区在线日本高清免费| 久久国产视频网| 粉嫩小护士| 真实处破女全过程完免费观看| 色妺妺免费影院| 开心成人社区| 国产精品伊人| qvod在线观看| 中文字幕日本一区| 亚洲 欧美无码原创区| 欧美日韩中文字幕综合图区 | 冰山高冷受被c到哭np双性| 亚洲欧美中文字幕网站大全| 日韩精品亚洲专区在线电影不卡| 久久久久国产精品美女毛片| 国产精品久久久久影院色| old老男人野外树林tv| 亚洲色欲色欲WWW在线丝|