chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

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

掃碼添加小助手

加入工程師交流群

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

初識(shí)AXI quad SPI

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

自《PG153 AXI Quad SPI v3.2》

支持:

Legacy Mode

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

Dual/Quad SPI Mode:

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

AXI QuadSPI 模式

在標(biāo)準(zhǔn)模式下,支持高達(dá)32個(gè)從站,這是非常靈活的指標(biāo)。本文對(duì)于手冊(cè)中的詳細(xì)技術(shù)細(xì)節(jié)不做過多闡述,有興趣的自行深入閱讀研究。

該SPI IP能干神馬呢?

完成如下這樣一個(gè)應(yīng)用場景:

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

SPI IP訪問多從SPI芯片

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

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

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

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

實(shí)現(xiàn)SPI外設(shè)控制器驅(qū)動(dòng)

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

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

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

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

PS/PL軟硬件層次架構(gòu)圖

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

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

block design

約束

綜合

導(dǎo)出

乃至PS端:

SPI驅(qū)動(dòng)配置

設(shè)備樹修改

系統(tǒng)編譯部署

設(shè)備驅(qū)動(dòng)測(cè)試

按照這個(gè)流程,那么第一步需要設(shè)計(jì)PL端與PS端的配置,且看:

AXI Quad SPI 之配置

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

ZYNQ7 processing System

AXI interconnect

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

Processing System Reset(添加ZYNQ7 processing System 點(diǎn)自動(dòng)連線會(huì)自動(dòng)添加,當(dāng)然也可以手動(dòng)添加)

Concat

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

Block設(shè)計(jì)圖

使能ZYNQ7 processing System的時(shí)鐘PL Fabric clocks,用以驅(qū)動(dòng)PL端的IP:

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

PL Fabric clocks設(shè)置

使能M AXI GP0接口如下:

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

M AXI GP0設(shè)置

雙擊AXI interconnect,設(shè)置2主1從:

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

AXI interconnect設(shè)置

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

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

axi_quad_spi設(shè)置

同樣將axi_quad_spi_1設(shè)置為2個(gè)從設(shè)備接口。

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

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

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

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

......

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

對(duì)于AXI quad SPI外設(shè)還有一個(gè)很重要的配置,就是其地址范圍:

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

AXI quad SPI地址設(shè)置

該地址最終將導(dǎo)出到設(shè)備樹描述文件,用于SPI控制器驅(qū)動(dòng)訪問,從而讓SPI控制器驅(qū)動(dòng)得以與該IP通過AXI總線進(jìn)行通信。

導(dǎo)出硬件文件

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

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

管腳約束設(shè)置

電平標(biāo)準(zhǔn)

是否上拉

驅(qū)動(dòng)能力

.....

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

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

導(dǎo)出硬件描述文件

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

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

硬件描述及bit文件

配置編譯內(nèi)核

運(yùn)行命令讀取硬件描述文件:

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

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

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

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

petalinux-config

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

配置設(shè)備樹

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

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

配置設(shè)備樹如下:

/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兼容從設(shè)備驅(qū)動(dòng),當(dāng)然如果需要自己定義一個(gè)SPI設(shè)備驅(qū)動(dòng)也是非常容易的,但是對(duì)于大部分普通的SPI從芯片而言直接使用spidev設(shè)備驅(qū)動(dòng)即可,只需要在讀寫時(shí)按照芯片手冊(cè)協(xié)議進(jìn)行訪問即可。

配置內(nèi)核

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

petalinux-config-ckernel

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

內(nèi)核配置

對(duì)于本應(yīng)用而言,需要配置SPI驅(qū)動(dòng):

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

配置如下:

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

SPI控制器及設(shè)備驅(qū)動(dòng)配置

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

Powermanagementoptions---> SuspendtoRAMandstandby

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

功能管理配置

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

petalinux-build

等待編譯成功后,運(yùn)行下面命令將bitstream文件包進(jìn)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 是本文工程的目錄

測(cè)試SPI從設(shè)備

編寫驅(qū)動(dòng)測(cè)試程序,代碼如下:

#include #include #include #include intmain(intargc,char**argv) { intfd; intlen; unsignedcharbuf[10]; unsignedchartmp; /*驗(yàn)證輸入?yún)?shù)個(gè)數(shù)*/ if(3!=argc) { printf("nonepara "); return-1; } /*打開輸入的設(shè)備文件,獲取文件句柄*/ 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卡上電運(yùn)行電路板:

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

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

spidev設(shè)備掛載情況

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

然后運(yùn)行測(cè)試程序:

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

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

總結(jié)一下

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

CPOL/CPHA 組合四種模式設(shè)置

SPI通信速率設(shè)置

從設(shè)備應(yīng)用協(xié)議程序編寫

AXI Quad SPI FIFO特性的深入應(yīng)用

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

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

編輯:jq

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

    關(guān)注

    17

    文章

    1865

    瀏覽量

    99687
  • CS
    CS
    +關(guān)注

    關(guān)注

    0

    文章

    55

    瀏覽量

    25416
  • AXI
    AXI
    +關(guān)注

    關(guān)注

    1

    文章

    142

    瀏覽量

    17778

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

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    SPI優(yōu)點(diǎn)

    頻率為 10 MHz,每次傳輸 8 位,可實(shí)現(xiàn)的最大數(shù)據(jù)速率為 10 Mbps。這允許主設(shè)備設(shè)備之間快速交換數(shù)據(jù),從而增強(qiáng)整體系統(tǒng)性能。 全雙工通信:
    發(fā)表于 11-26 07:42

    使用AXI4接口IP核進(jìn)行DDR讀寫測(cè)試

    本章的實(shí)驗(yàn)任務(wù)是在 PL 自定義一個(gè) AXI4 接口的 IP 核,通過 AXI_HP 接口對(duì) PS DDR3 進(jìn)行讀寫測(cè)試,讀寫的內(nèi)存
    的頭像 發(fā)表于 11-24 09:19 ?2577次閱讀
    使用<b class='flag-5'>AXI</b>4接口IP核進(jìn)行DDR讀寫測(cè)試

    【書籍評(píng)測(cè)活動(dòng)NO.67】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動(dòng)開發(fā)(第 2 版)》

    時(shí)代的硬核技能?,F(xiàn)在,我們零起步,進(jìn)入Linux設(shè)備驅(qū)動(dòng)開發(fā)的世界吧。從零開始學(xué)會(huì)Linux設(shè)備驅(qū)動(dòng)開發(fā)要
    發(fā)表于 11-17 17:52

    AEK-COM-ISOSPI1技術(shù)解析:SPI隔離通信在汽車電子中的應(yīng)用

    根。ISOSPI協(xié)議具有差分通信的特點(diǎn),有助于提高遠(yuǎn)程通信的抗噪性和魯棒性。AEK-COM-ISOSPI1加密狗承載有L9963T收發(fā)器,可配置為SPI總線的機(jī)或主機(jī),并支持8位64位SP
    的頭像 發(fā)表于 10-24 15:48 ?367次閱讀
    AEK-COM-ISOSPI1技術(shù)解析:<b class='flag-5'>SPI</b>隔離通信在汽車電子中的應(yīng)用

    如何在 ART-Pi 平臺(tái)使用 openocd 直接燒錄到外部 spi flash?

    ART-Pi 內(nèi)置的 128Kb flash太小了,我現(xiàn)在在 Linux openocd 燒錄程序,請(qǐng)問有沒有人成功使用 openocd 可以直接燒寫到外部 Quad spi flash 的?
    發(fā)表于 09-15 07:32

    深入剖析SPI協(xié)議

    SPI,全稱(Serial Peripheral interface)是由摩托羅拉公司首先定義的協(xié)議,中文名為串型外圍設(shè)備接口。SPI是一種高速全雙工的總線協(xié)議。
    的頭像 發(fā)表于 08-21 15:04 ?3408次閱讀
    深入剖析<b class='flag-5'>SPI</b>協(xié)議

    請(qǐng)問BTSDK3.1是否支持cyw20719B2 Quad SPI功能?

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

    請(qǐng)問Modus Toolbox 中如何設(shè)置CYW20719B2的Quad SPI接口?

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

    能否提供Linux下USB轉(zhuǎn)SPI模式的測(cè)試程序?

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

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

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

    SPI通信總線概述和Verilog實(shí)現(xiàn)

    SPI = Serial Peripheral Interface,是串行外圍設(shè)備接口,是一種高速,全雙工,同步的通信總線。
    的頭像 發(fā)表于 02-07 14:28 ?1973次閱讀
    <b class='flag-5'>SPI</b>通信總線概述和Verilog實(shí)現(xiàn)

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

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

    迅為RK3568開發(fā)板驅(qū)動(dòng)指南Linux中通用SPI設(shè)備驅(qū)動(dòng)

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

    EE-177:SHARC SPI機(jī)引導(dǎo)

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

    KeyStone架構(gòu)串行外設(shè)接口(SPI)手冊(cè)

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