電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Rpi SenseHAT與AMD-Xilinx Kria KR260和Petalinux的接口

Rpi SenseHAT與AMD-Xilinx Kria KR260和Petalinux的接口

2023-07-13 | zip | 0.00 MB | 次下載 | 免費

資料介紹

描述

教程是關(guān)于“Rpi SenseHAT 與 AMD-Xilinx Kria KR260 和 Petalinux 的接口”。

本教程中使用的工具有:

  • 維瓦多 2022.2
  • 花瓣 2022.2
Rpi-SenseHAT 的 VIVADO/Petalinux 項目源碼、BSP、Kria 固件可在 Github 獲?。?/font>https://github.com/LogicTronix/KR260-SenseHAT-Petalinux [ Git Branch: SenseHAT-Sensors ]

樹莓派感知帽子

Raspberry Pi Sense HAT是一個附加板,可提供一系列傳感功能。機(jī)載傳感器使我們能夠監(jiān)控壓力、濕度、溫度、顏色、方向和運動。8x8 RGB LED 矩陣讓我們能夠可視化來自傳感器的數(shù)據(jù),五鍵操縱桿可以充當(dāng)輸入設(shè)備。

板上的所有傳感器都連接到單個 I2C 總線。所有的傳感器都充當(dāng)從機(jī),并使用 I2C 協(xié)議與主機(jī)進(jìn)行通信

Sense Hat 上使用的 IC

poYBAGSBKZ-AAM4oAACL7SJEYyY066.png
?
poYBAGSBKaSAYG-BAAHaHl52-VQ834.png
圖片:Raspberry Pi- Sense HAT
?

Vivado 設(shè)計流程

設(shè)計中使用的 IP

以下是 Vivado 設(shè)計中使用的 IP 內(nèi)核,用于創(chuàng)建在 Kria KR260 上運行的“Sense HAT-I2C 接口”。

Zynq? Ultrascale+? MPSoC

pYYBAGSBKaeAM2EzAAA8FxsEuaQ808.png
?

Zynq? Ultrascale+? MPSoC 充當(dāng) PS 和 PL 之間的邏輯連接,同時協(xié)助使用 Vivado? IP 集成器將定制和嵌入式 IP 與處理系統(tǒng)集成。

AXI 中斷控制器

poYBAGSBKaqAdWCMAAAdOC157sg073.png
?

AXI 中斷控制器 (AXI INTC) 內(nèi)核將來自外圍設(shè)備的多個中斷輸入集中到系統(tǒng)處理器的單個中斷輸出。

時鐘向?qū)?/font>

pYYBAGSBKa2AX7o3AAAYHPqw_cM056.png
?

Clocking Wizard IP 簡化了為根據(jù)用戶時鐘要求定制的時鐘電路創(chuàng)建 HDL 源代碼包裝器的過程。該向?qū)е笇?dǎo)用戶為您的時鐘原語設(shè)置適當(dāng)?shù)膶傩?,并允許覆蓋任何向?qū)в嬎愕?a target='_blank' class='arckwlink_none'>參數(shù)

AXI IIC 總線接口

pYYBAGSBKa-AWG4sAAAd1Y-Cgb4413.png
?

AXI IIC 總線接口連接到 AMBA? AXI 規(guī)范,并為大量流行設(shè)備提供低速、雙線、串行總線接口。產(chǎn)品規(guī)范定義了 AXI IIC 總線接口模塊的架構(gòu)、硬件信號)接口、軟件(寄存器)接口和參數(shù)化選項。

處理系統(tǒng)重置

poYBAGSBKbKAQP4aAABFAh-WCg0500.png
?

處理系統(tǒng)復(fù)位是一個軟 IP,它提供了一種機(jī)制來處理給定系統(tǒng)的復(fù)位條件。內(nèi)核在輸入端處理多種復(fù)位條件,并在輸出端生成適當(dāng)?shù)膹?fù)位。該內(nèi)核根據(jù)外部或內(nèi)部復(fù)位條件生成復(fù)位。

AXI互連

poYBAGSBKbWAXcSQAAArjUgvIeg523.png
?

AXI 互連 IP 將一個或多個 AXI 內(nèi)存映射主設(shè)備連接到一個或多個內(nèi)存映射從設(shè)備。AXI 互連內(nèi)核允許 AXI 主設(shè)備和從設(shè)備的任意組合連接到它,這些設(shè)備在數(shù)據(jù)寬度、時鐘域和 AXI 子協(xié)議(AXI4、AXI3 或 AXI4-Lite)方面可能各不相同。

塊設(shè)計-完整的塊設(shè)計

pYYBAGSBKbmABB0HAAE3TRJX6RY497.png
圖片:完整的 VIVADO 模塊設(shè)計
?

Sense HAT - KR260 接頭對齊

poYBAGSBKb2AIKrzAADmUxxOFDQ660.png
圖片:Sense HAT - KR260 接頭對齊
?

如上圖所示,Sense HAT 位于 KR260 上的 RPi 接頭上方。此對齊顯示了 40 個引腳的描述。傳感器通過使用引腳 3 和 5 的 I2C 進(jìn)行通信。

約束

KR260 上只有 2 個引腳(AE14 和 AE15)需要約束 I2C 才能工作。AE15 用于 SDA,AE14 用于 SCL。

set_property PACKAGE_PIN AE15 [get_ports {iic_sda_io}]
set_property IOSTANDARD LVCMOS33 [get_ports {iic_sda_io}]
set_property PULLUP true [get_ports {iic_sda_io}]

set_property PACKAGE_PIN AE14 [get_ports {iic_scl_io}]
set_property IOSTANDARD LVCMOS33 [get_ports {iic_scl_io}]
set_property PULLUP true [get_ports {iic_scl_io}]

但是,下圖可用作映射和約束所有其他引腳的參考。

pYYBAGSBKcGANmjEAADm4bseuDQ959.png
圖片:使用 Raspberry Pi 40 針 GPIO 接頭(HAT 接頭)的詳細(xì)約束映射
?

生成 XSA

  • 從“文件”菜單中,選擇“導(dǎo)出”>“導(dǎo)出平臺”。
  • 在平臺類型窗口中選擇硬件選項。
poYBAGSBKcSAf5MlAABnQXp_shg780.png
?
  • 選擇 Pre-Synthesis 狀態(tài),并在 Platform State 窗口中選擇 Include bitstream 選項。
poYBAGSBKcaAbn1AAAB2r2IHntE719.png
?
  • 更改所需的平臺屬性。
pYYBAGSBKcmAIqrwAABjfMidd5Q698.png
?
  • 輸入 XSA 的名稱并選擇要將 XSA 導(dǎo)出到的文件夾,然后選擇完成。
poYBAGSBKcuAaL2QAABQdx5g2r4857.png
?

Petalinux 流程:

Sense HAT 傳感器的驅(qū)動程序可用性

為了集成 SenseHAT 傳感器,我們必須擁有這些傳感器的 Petalinux 驅(qū)動程序或 linux 驅(qū)動程序。對于 SenseHAT,大多數(shù)傳感器的 C/C++ 驅(qū)動程序都可以從供應(yīng)商那里獲得。一些驅(qū)動程序也是由獨立開發(fā)人員編寫的。

濕度/溫度

加速度計/陀螺儀和磁力計

壓力/溫度

LED驅(qū)動

Petalinux 開發(fā):

先決條件

創(chuàng)建 petalinux 項目需要支持的 BSP,可從以下鏈接下載。也可以在沒有 BSP 的情況下創(chuàng)建項目,但不太方便。

創(chuàng)建、配置和構(gòu)建 Petalinux 項目

下面列出了創(chuàng)建 petalinux 項目的步驟。

● 創(chuàng)建一個文件夾并復(fù)制從Vivado 導(dǎo)出的平臺(XSA)。

● 同時復(fù)制 Vivado 生成的 BIN 文件,位于 /.runs/impl_1/.bin

● 在目錄中打開終端并獲取petalinux 腳本。

● 運行以下命令創(chuàng)建名為 的petalinux 項目。

petalinux-create --type project -s to-bsp> --name name>

● 運行以下命令配置項目。

petalinux-config --get-hw-description 

● 在項目配置窗口中,

○ 在 FPGA 管理器下啟用 FPGA 管理器。

pYYBAGSBKc6AL8WzAACx-6j5vNY532.png
?
  • 在圖像打包配置下,
  • 將根文件系統(tǒng)類型更改為 INITRD
  • 將 INITRAMFS/INITRD 映像名稱更改為 petalinux-initramfs-image
  • 禁用 Copy final images to tftpbootUnder Image Packaging Configuration,
pYYBAGSBKdGAbzosAADqbK9E6Fo495.png
?
  • 保存并退出配置窗口。
  • 運行以下命令來配置內(nèi)核。
petalinux-config -c kernel
  • 在 Device Drivers > I2C support > I2C Hardware Bus support 下,啟用
  • Cadence I2C 控制器
  • 賽靈思 I2C 控制器
poYBAGSBKdaAMH4xAAGmmZpE0BE206.png
?
  • 保存并退出配置。
  • 運行以下命令來配置根文件系統(tǒng)。
petalinux-config -c rootfs
  • 在 Filesystem Packages > base > i2c-tools 下,啟用
  • i2c-工具
  • i2c-工具-dev
pYYBAGSBKdqAdwXSAAC2C4IL7eM435.png
?
  • 在 Filesystem Packages > misc > python3 下,啟用
  • 蟒蛇3
  • 您需要的所有其他 python 模塊
poYBAGSBKd2AWC95AAD6Mq48Nmo976.png
?
  • 保存并退出配置。
  • 運行petalinux-build來構(gòu)建項目。
poYBAGSBKeGAYMKQAAG_o02aluU805.png
?

生成/創(chuàng)建可引導(dǎo)映像

  • 運行以下命令以創(chuàng)建可引導(dǎo)的 WIC 映像。
petalinux-package --wic --images-dir images/linux/ --bootfiles "ramdisk.cpio.gz.u-boot, boot.scr, Image, system.dtb, system-zynqmp-sck-kr-g-revB.dtb" --disk-name "sda"
  • 確保 dtb 文件存在于 /images/linux/ 目錄中。
pYYBAGSBKeSAbN2CAAIjgUAE8Do479.png
?
  • 下載、安裝并運行 BalenEtcher。
  • 在 images/linux 目錄中找到 WIC 映像。
pYYBAGSBKemAbleoAAAqo6sUjdg699.png
?
  • 選擇目標(biāo)設(shè)備并選擇 Flash。
poYBAGSBKeuAfx7RAAArN6UYvuU330.png
?

準(zhǔn)備覆蓋:

生成設(shè)備樹覆蓋

  • 在復(fù)制 XSA 的目錄中打開終端。在這里再次獲取 Petalinux 并運行xsct命令。
  • 如果系統(tǒng)找不到 xsct 命令,請確保獲取 Vitis 或 PetaLinux shell 腳本。
  • 如果在運行 Petalinux shell 腳本后 xsct 命令仍然缺失,請運行以下命令。
PATH="${XSCT_TOOLCHAIN}/bin:${PATH}"
  • 運行以下“HSI”命令將在當(dāng)前目錄中提取 XSA 的內(nèi)容。
hsi::open_hw_design ./.xsa
pYYBAGSBKe2AYJggAABjLXPWbgs534.png
?
createdts -hw ./name>.xsa -zocl -platform-name platform-name> -git-branch  -overlay -compile -out ./name-is-better>
  • 運行上面的命令將:
  • 從 Xilinx 設(shè)備樹生成器 repo 克隆分支
  • 在.////psu_cortexa53_0/device_tree_domain/bsp/ 目錄
poYBAGSBKfCAY4-zAACBXMIwwZU688.png
?
  • 退出xsct外殼。
注意:以下命令可以在沒有 Petalinux 腳本源的常規(guī)終端中運行。
  • 運行以下命令編譯設(shè)備樹。
dtc -@ -O dtb -o ./kr260.dtbo ./kr260_dt/kr260_dt/kr260/psu_cortexa53_0/device_tree_domain/bsp/pl.dtsi
  • 確保編輯 pl.dtsi 的路徑。
  • 此命令將在當(dāng)前目錄中生成 kr260.dtbo。
  • 如果 dtc 拋出“ dtc: invalid option -- '@'”錯誤,則需要自己編譯 dtc。

編譯故障碼

  • 運行以下命令。
git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git
cd dtc
make
  • 如果遇到“cc1: all warnings being treated as errors”,編輯 dtc 目錄中的 Makefile 并從 CFLAGS 中刪除 -Werror 標(biāo)志。
make install
  • 運行上面的命令將在 $HOME/bin.. 中安裝 dtc

重試編譯設(shè)備樹

  • 運行 cd../ 移出 dtc 目錄
  • dtc -@ -O dtb -o./kr260.dtbo./kr260_dt/kr260_dt/kr260/psu_cortexa53_0/device_tree_domain/bsp/pl.dtsi

將文件傳輸?shù)皆O(shè)備

  • 運行以下命令創(chuàng)建 shell.json。
echo '{ "shell_type" : "XRT_FLAT", "num_slots": "1" }' > shell.json
  • 將 Vivado 實現(xiàn)目錄中的 bin 文件重命名為您命名 dtbo 的相同名稱。
  • 我已將它們重命名為 kr260.bit.bin 和 kr260.dtbo。
  • 將 Sense HAT 連接到 KR260 接頭。
  • 現(xiàn)在啟動設(shè)備并登錄。
  • 用戶名密碼默認(rèn)petalinux 。
  • 在設(shè)備主目錄中創(chuàng)建一個目錄。
mkdir ~/<any-directory-name>
  • 將您的設(shè)備連接到路由器并通過運行 ifconfig 命令查找 IP 地址。如果您在路由器設(shè)置中為設(shè)備分配靜態(tài) IP 會更好。
  • 在主機(jī)上運行 scp 命令以將文件傳輸?shù)皆O(shè)備。
scp ./kr260.bit.bin ./kr260.dtbo ./shell.json petalinux@:~/
poYBAGSBKfSAdGM6AAVftdJpBI8265.jpg
圖片:帶有 KR260 連接的 SenseHAT
?

在 I2C 總線上加載覆蓋和檢測設(shè)備

  • 將包含 kr260.bit.bin、kr260.dtbo 和 shell.json 的目錄移動到 /lib/firmware/xilinx/。
sudo mv ./ /lib/firmware/xilinx/
  • 列出設(shè)備上存在的應(yīng)用程序。
sudo xmutil listapps
pYYBAGSBKfeAPJqAAACEcoDh8nI563.png
?
  • 卸載當(dāng)前應(yīng)用程序。
sudo xmutil unloadapp
  • 加載您的應(yīng)用程序(在本例中為 kr260)。
sudo xmutil loadapp kr260
  • 檢查 XIIC 是否在系統(tǒng)中被列為 I2C 總線。
i2cdetect -l
  • 這將列出系統(tǒng)中的所有 I2C 總線(在本例中為 i2c-7)。
poYBAGSBKfqAU4QyAABjxLYhB4s289.png
?
  • 檢查 XIIC 總線上的設(shè)備。
I2cdetect -y -r <i2c-bus-number>
  • 這將顯示連接到 I2C 總線的傳感器的地址。
  • 如果 Sense Hat 正在工作,它應(yīng)該顯示以下地址。
  • 以下 I2C 總線 7 的地址映射顯示了來自 Sense HAT 的所有傳感器地址。這些地址也在表 1 中列出。
pYYBAGSBKf2AZumlAABKK_eYVzg177.png
?

使用 Python 與傳感器通信

要使用 python 與連接到總線的傳感器進(jìn)行通信,需要安裝 python 包。

安裝 pip,Python 的包安裝程序

要安裝所需的包,需要 pip。由于 petalinux 沒有啟用 pip 的選項,因此應(yīng)手動安裝。

值得慶幸的是,安裝 pip 非常容易。按照以下步驟操作。

  • 在終端中運行以下任何命令以下載 get-pip.py python 腳本。
wget https://bootstrap.pypa.io/get-pip.py
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  • 運行 python get-pip.py 并等待它完成。
  • 如果上述命令不起作用,請運行 python3 get-pip.py。

安裝 SMBus

要安裝 SMBus,請運行pip install smbusSMBus 通過 i2c-dev 為 Linux SMBus 訪問提供 python 綁定。

編寫一個粗糙的 python 應(yīng)用程序

為了與傳感器通信,我們需要一個 SMBus 類的對象,它為我們提供了使通信更容易的各種功能。我們通過傳遞傳感器所連接的 I2C 總線編號來創(chuàng)建 SMBus 類的新實例。

bus = smbus.SMBus(<i2c-bus-number>)

使用總線對象,我們可以訪問以下功能,幫助我們從/向傳感器寄存器讀取/寫入數(shù)據(jù)。

poYBAGSBKgCAHK0ZAABU6bJmb1M197.png
?

為了從傳感器獲取數(shù)據(jù),我們將特定字節(jié)數(shù)據(jù)寫入控制寄存器,以啟用/禁用設(shè)備中的某些功能。最重要的一步是將傳感器置于活動模式,這將開始感應(yīng)并將結(jié)果存儲在其內(nèi)部寄存器中。然后我們可以讀取這些寄存器并使用也存儲在其他寄存器中的校準(zhǔn)數(shù)據(jù)進(jìn)行計算。

校準(zhǔn)數(shù)據(jù)存儲在內(nèi)部非易失性存儲器中,并在開機(jī)時寫入校準(zhǔn)寄存器。

有關(guān)寄存器及其描述的詳細(xì)信息,請查看傳感器的數(shù)據(jù)表。

與傳感器通信的通用方式

設(shè)備上的所有傳感器都遵循類似的配置和校準(zhǔn)方法。

  • 設(shè)置輸出數(shù)據(jù)速率和平均
  • 輸出數(shù)據(jù)速率指定更新輸出數(shù)據(jù)的頻率
  • 平均給出所選樣本數(shù)量的平均值
  • 激活傳感器
  • 讀取并存儲校準(zhǔn)數(shù)據(jù)
  • 讀取輸出值并應(yīng)用校準(zhǔn)

代碼片段

# HTS221 Sensor Initialization

def HTS221_Init():
temp = bus.read_byte_data(HTS221_ADDRESS, HTS221_CTRL1)
temp |= HTS221_CTRL1_MASK
bus.write_byte_data(HTS221_ADDRESS, HTS221_CTRL1, temp)

# Reading Temperature from Sensor

def HTS221_T_ReadTemp():
buffer = bus.read_i2c_block_data(HTS221_ADDRESS, HTS221_T0_C_8 | 0x80, 2)
tmp = bus.read_byte_data(HTS221_ADDRESS, HTS221_T1_T0)
T0_degC_x8_u16 = ((tmp & 0x03) << 8) | buffer[0]
T1_degC_x8_u16 = ((tmp & 0x0C) << 6) | buffer[1]
T0_degC = twos_complement(bin_str((T0_degC_x8_u16 >> 3), 16), 16)
T1_degC = twos_complement(bin_str((T1_degC_x8_u16 >> 3), 16), 16)
buffer = bus.read_i2c_block_data(HTS221_ADDRESS, HTS221_T0_OUT | 0x80, 4)
T0_out = twos_complement(bin_str(((buffer[1] << 8) | buffer[0]), 16), 16)
T1_out = twos_complement(bin_str(((buffer[3] << 8) | buffer[2]), 16), 16)
buffer = bus.read_i2c_block_data(
HTS221_ADDRESS, HTS221_TEMP_OUT_L | 0x80, 2)
T_out = twos_complement(bin_str(((buffer[1] << 8) | buffer[0]), 16), 16)
temperature = (T_out - T0_out) * (T1_degC - T0_degC) / \
(T1_out - T0_out) + T0_degC
return temperature

傳感器的輸出

HTS221 傳感器的溫度和濕度讀數(shù)

pYYBAGSBKgKAbDKYAACa7VB4cmk031.png
?

LPS25H 傳感器的溫度和壓力讀數(shù)

poYBAGSBKgWAJwNlAACD6PKyhbE756.png
?

LSM9DS1 傳感器的加速度、磁力計和陀螺儀讀數(shù)

pYYBAGSBKgiAOipFAADWESRf_I0485.png
?

本教程的VIVADO、Petalinux工程源碼和Python源碼查看:Github【Git分支:SenseHAT-Sensors】

您可以在您的 PC 上通過以下命令克隆 Git Branch:

git clone -b SenseHAT-Sensors https://github.com/logictronix/kr260-sensehat-petalinux

感謝 Frank Shrestha [frank_shrestha@logictronix.com] 創(chuàng)建了這個“深入”教程!


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費