資料介紹
描述
本教程是關(guān)于“Rpi SenseHAT 與 AMD-Xilinx Kria KR260 和 Petalinux 的接口”。
本教程中使用的工具有:
- 維瓦多 2022.2
- 花瓣 2022.2
Rpi-SenseHAT 的 VIVADO/Petalinux 項(xiàng)目源碼、BSP、Kria 固件可在 Github 獲?。?/font>https://github.com/LogicTronix/KR260-SenseHAT-Petalinux [ Git Branch: SenseHAT-Sensors ]
樹(shù)莓派感知帽子
Raspberry Pi Sense HAT是一個(gè)附加板,可提供一系列傳感功能。機(jī)載傳感器使我們能夠監(jiān)控壓力、濕度、溫度、顏色、方向和運(yùn)動(dòng)。8x8 RGB LED 矩陣讓我們能夠可視化來(lái)自傳感器的數(shù)據(jù),五鍵操縱桿可以充當(dāng)輸入設(shè)備。
板上的所有傳感器都連接到單個(gè) I2C 總線。所有的傳感器都充當(dāng)從機(jī),并使用 I2C 協(xié)議與主機(jī)進(jìn)行通信。
Sense Hat 上使用的 IC:


Vivado 設(shè)計(jì)流程
設(shè)計(jì)中使用的 IP
以下是 Vivado 設(shè)計(jì)中使用的 IP 內(nèi)核,用于創(chuàng)建在 Kria KR260 上運(yùn)行的“Sense HAT-I2C 接口”。
Zynq? Ultrascale+? MPSoC

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

AXI 中斷控制器 (AXI INTC) 內(nèi)核將來(lái)自外圍設(shè)備的多個(gè)中斷輸入集中到系統(tǒng)處理器的單個(gè)中斷輸出。
時(shí)鐘向?qū)?/font>

Clocking Wizard IP 簡(jiǎn)化了為根據(jù)用戶時(shí)鐘要求定制的時(shí)鐘電路創(chuàng)建 HDL 源代碼包裝器的過(guò)程。該向?qū)е笇?dǎo)用戶為您的時(shí)鐘原語(yǔ)設(shè)置適當(dāng)?shù)膶傩?,并允許覆蓋任何向?qū)в?jì)算的參數(shù)。
AXI IIC 總線接口

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

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

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

Sense HAT - KR260 接頭對(duì)齊

如上圖所示,Sense HAT 位于 KR260 上的 RPi 接頭上方。此對(duì)齊顯示了 40 個(gè)引腳的描述。傳感器通過(guò)使用引腳 3 和 5 的 I2C 進(jìn)行通信。
約束
KR260 上只有 2 個(gè)引腳(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}]
但是,下圖可用作映射和約束所有其他引腳的參考。

生成 XSA
- 從“文件”菜單中,選擇“導(dǎo)出”>“導(dǎo)出平臺(tái)”。
- 在平臺(tái)類型窗口中選擇硬件選項(xiàng)。

- 選擇 Pre-Synthesis 狀態(tài),并在 Platform State 窗口中選擇 Include bitstream 選項(xiàng)。

- 更改所需的平臺(tái)屬性。

- 輸入 XSA 的名稱并選擇要將 XSA 導(dǎo)出到的文件夾,然后選擇完成。

Petalinux 流程:
Sense HAT 傳感器的驅(qū)動(dòng)程序可用性
為了集成 SenseHAT 傳感器,我們必須擁有這些傳感器的 Petalinux 驅(qū)動(dòng)程序或 linux 驅(qū)動(dòng)程序。對(duì)于 SenseHAT,大多數(shù)傳感器的 C/C++ 驅(qū)動(dòng)程序都可以從供應(yīng)商那里獲得。一些驅(qū)動(dòng)程序也是由獨(dú)立開(kāi)發(fā)人員編寫(xiě)的。
濕度/溫度
加速度計(jì)/陀螺儀和磁力計(jì)
壓力/溫度
- https://github.com/ameltech/sme-lps25h-library
- https://github.com/kirananto/RaZorReborn/tree/master/drivers/sensors/pressure/lps25h
Petalinux 開(kāi)發(fā):
先決條件
創(chuàng)建 petalinux 項(xiàng)目需要支持的 BSP,可從以下鏈接下載。也可以在沒(méi)有 BSP 的情況下創(chuàng)建項(xiàng)目,但不太方便。
- 從 Xilinx 下載為開(kāi)發(fā)板下載支持的 BSP。
- 下載鏈接:https://www.xilinx.com/member/forms/download/xef.html? filename=xilinx-kr260-starterkit-v2022.2-10141622.bsp
創(chuàng)建、配置和構(gòu)建 Petalinux 項(xiàng)目
下面列出了創(chuàng)建 petalinux 項(xiàng)目的步驟。
● 創(chuàng)建一個(gè)文件夾并復(fù)制從Vivado 導(dǎo)出的平臺(tái)(XSA)。
● 同時(shí)復(fù)制 Vivado 生成的 BIN 文件,位于 /.runs/impl_1/.bin
● 在目錄中打開(kāi)終端并獲取petalinux 腳本。
● 運(yùn)行以下命令創(chuàng)建名為 的petalinux 項(xiàng)目。
petalinux-create --type project -s to-bsp> --name name>
● 運(yùn)行以下命令配置項(xiàng)目。
petalinux-config --get-hw-description
● 在項(xiàng)目配置窗口中,
○ 在 FPGA 管理器下啟用 FPGA 管理器。

- 在圖像打包配置下,
- 將根文件系統(tǒng)類型更改為 INITRD
- 將 INITRAMFS/INITRD 映像名稱更改為 petalinux-initramfs-image
- 禁用 Copy final images to tftpbootUnder Image Packaging Configuration,

- 保存并退出配置窗口。
- 運(yùn)行以下命令來(lái)配置內(nèi)核。
petalinux-config -c kernel

- 保存并退出配置。
- 運(yùn)行以下命令來(lái)配置根文件系統(tǒng)。
petalinux-config -c rootfs
- 在 Filesystem Packages > base > i2c-tools 下,啟用
- i2c-工具
- i2c-工具-dev


- 保存并退出配置。
- 運(yùn)行petalinux-build來(lái)構(gòu)建項(xiàng)目。

生成/創(chuàng)建可引導(dǎo)映像
- 運(yùn)行以下命令以創(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/ 目錄中。

- 下載、安裝并運(yùn)行 BalenEtcher。
- 在 images/linux 目錄中找到 WIC 映像。

- 選擇目標(biāo)設(shè)備并選擇 Flash。

準(zhǔn)備覆蓋:
生成設(shè)備樹(shù)覆蓋
- 在復(fù)制 XSA 的目錄中打開(kāi)終端。在這里再次獲取 Petalinux 并運(yùn)行xsct命令。
- 如果系統(tǒng)找不到 xsct 命令,請(qǐng)確保獲取 Vitis 或 PetaLinux shell 腳本。
- 如果在運(yùn)行 Petalinux shell 腳本后 xsct 命令仍然缺失,請(qǐng)運(yùn)行以下命令。
PATH="${XSCT_TOOLCHAIN}/bin:${PATH}"
- 運(yùn)行以下“HSI”命令將在當(dāng)前目錄中提取 XSA 的內(nèi)容。
hsi::open_hw_design ./.xsa

createdts -hw ./name>.xsa -zocl -platform-name platform-name> -git-branch -overlay -compile -out ./name-is-better>
- 運(yùn)行上面的命令將:
- 從 Xilinx 設(shè)備樹(shù)生成器 repo 克隆分支
- 在.////psu_cortexa53_0/device_tree_domain/bsp/ 目錄

- 退出xsct外殼。
注意:以下命令可以在沒(méi)有 Petalinux 腳本源的常規(guī)終端中運(yùn)行。
- 運(yùn)行以下命令編譯設(shè)備樹(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 -- '@'”錯(cuò)誤,則需要自己編譯 dtc。
編譯故障碼
- 運(yùn)行以下命令。
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
- 運(yùn)行上面的命令將在 $HOME/bin.. 中安裝 dtc
重試編譯設(shè)備樹(shù)
- 運(yùn)行 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è)備
- 運(yùn)行以下命令創(chuàng)建 shell.json。
echo '{ "shell_type" : "XRT_FLAT", "num_slots": "1" }' > shell.json
- 將 Vivado 實(shí)現(xiàn)目錄中的 bin 文件重命名為您命名 dtbo 的相同名稱。
- 我已將它們重命名為 kr260.bit.bin 和 kr260.dtbo。
- 將 Sense HAT 連接到 KR260 接頭。
- 現(xiàn)在啟動(dòng)設(shè)備并登錄。
- 用戶名和密碼默認(rèn)為petalinux 。
- 在設(shè)備主目錄中創(chuàng)建一個(gè)目錄。
mkdir ~/<any-directory-name>
- 將您的設(shè)備連接到路由器并通過(guò)運(yùn)行 ifconfig 命令查找 IP 地址。如果您在路由器設(shè)置中為設(shè)備分配靜態(tài) IP 會(huì)更好。
- 在主機(jī)上運(yùn)行 scp 命令以將文件傳輸?shù)皆O(shè)備。
scp ./kr260.bit.bin ./kr260.dtbo ./shell.json petalinux@:~/

在 I2C 總線上加載覆蓋和檢測(cè)設(shè)備
- 將包含 kr260.bit.bin、kr260.dtbo 和 shell.json 的目錄移動(dòng)到 /lib/firmware/xilinx/。
sudo mv ./ /lib/firmware/xilinx/
- 列出設(shè)備上存在的應(yīng)用程序。
sudo xmutil listapps

- 卸載當(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)。

- 檢查 XIIC 總線上的設(shè)備。
I2cdetect -y -r <i2c-bus-number>
- 這將顯示連接到 I2C 總線的傳感器的地址。
- 如果 Sense Hat 正在工作,它應(yīng)該顯示以下地址。
- 以下 I2C 總線 7 的地址映射顯示了來(lái)自 Sense HAT 的所有傳感器地址。這些地址也在表 1 中列出。

使用 Python 與傳感器通信
要使用 python 與連接到總線的傳感器進(jìn)行通信,需要安裝 python 包。
安裝 pip,Python 的包安裝程序
要安裝所需的包,需要 pip。由于 petalinux 沒(méi)有啟用 pip 的選項(xiàng),因此應(yīng)手動(dòng)安裝。
值得慶幸的是,安裝 pip 非常容易。按照以下步驟操作。
- 在終端中運(yùn)行以下任何命令以下載 get-pip.py python 腳本。
wget https://bootstrap.pypa.io/get-pip.py
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
- 運(yùn)行 python get-pip.py 并等待它完成。
- 如果上述命令不起作用,請(qǐng)運(yùn)行 python3 get-pip.py。
安裝 SMBus
要安裝 SMBus,請(qǐng)運(yùn)行pip install smbus。SMBus 通過(guò) i2c-dev 為 Linux SMBus 訪問(wèn)提供 python 綁定。
編寫(xiě)一個(gè)粗糙的 python 應(yīng)用程序
為了與傳感器通信,我們需要一個(gè) SMBus 類的對(duì)象,它為我們提供了使通信更容易的各種功能。我們通過(guò)傳遞傳感器所連接的 I2C 總線編號(hào)來(lái)創(chuàng)建 SMBus 類的新實(shí)例。
bus = smbus.SMBus(<i2c-bus-number>)
使用總線對(duì)象,我們可以訪問(wèn)以下功能,幫助我們從/向傳感器寄存器讀取/寫(xiě)入數(shù)據(jù)。

為了從傳感器獲取數(shù)據(jù),我們將特定字節(jié)數(shù)據(jù)寫(xiě)入控制寄存器,以啟用/禁用設(shè)備中的某些功能。最重要的一步是將傳感器置于活動(dòng)模式,這將開(kāi)始感應(yīng)并將結(jié)果存儲(chǔ)在其內(nèi)部寄存器中。然后我們可以讀取這些寄存器并使用也存儲(chǔ)在其他寄存器中的校準(zhǔn)數(shù)據(jù)進(jìn)行計(jì)算。
校準(zhǔn)數(shù)據(jù)存儲(chǔ)在內(nèi)部非易失性存儲(chǔ)器中,并在開(kāi)機(jī)時(shí)寫(xiě)入校準(zhǔn)寄存器。
有關(guān)寄存器及其描述的詳細(xì)信息,請(qǐng)查看傳感器的數(shù)據(jù)表。
與傳感器通信的通用方式
設(shè)備上的所有傳感器都遵循類似的配置和校準(zhǔn)方法。
- 設(shè)置輸出數(shù)據(jù)速率和平均
- 輸出數(shù)據(jù)速率指定更新輸出數(shù)據(jù)的頻率
- 平均給出所選樣本數(shù)量的平均值
- 激活傳感器
- 讀取并存儲(chǔ)校準(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ù)

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

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

本教程的VIVADO、Petalinux工程源碼和Python源碼查看:Github【Git分支:SenseHAT-Sensors】
您可以在您的 PC 上通過(guò)以下命令克隆 Git Branch:
git clone -b SenseHAT-Sensors https://github.com/logictronix/kr260-sensehat-petalinux
感謝 Frank Shrestha [frank_shrestha@logictronix.com] 創(chuàng)建了這個(gè)“深入”教程!
- Kria KV260視覺(jué)AI入門套件用戶指南
- Kria KR260機(jī)器人入門套件:通過(guò)硬件加速釋放機(jī)器人
- 適用于AWS IoT Greengrass的Xilinx KV260入門指南
- 創(chuàng)建自定義Kria KV260加速M(fèi)L應(yīng)用程序
- Xilinx KV260 Vitis-AI 1.4人臉檢測(cè)
- 為Kria KV260添加USB WiFi
- Kria KV260 AI視覺(jué)套件入門
- Xilinx Kria KV260套件的第一個(gè)硬件項(xiàng)目
- Vivado 2021.1中的Kria KV260入門
- 使用Xilinx Kria KV260進(jìn)行AI火災(zāi)探測(cè)
- Xilinx KV 260構(gòu)建一個(gè)人臉識(shí)別車庫(kù)門鎖
- Kria KV260上的動(dòng)態(tài)交通燈系統(tǒng)
- PetaLinux 2020.1 ubuntu 安裝
- 基于XILINX的SPARTAN板的VGA接口顯示程序 8次下載
- 利用XILINX解決方案快速創(chuàng)建存儲(chǔ)器接口設(shè)計(jì)
- 使用Python提取ILA數(shù)據(jù)的流程 829次閱讀
- AMD Xilinx 7系列FPGA的Multiboot多bit配置 1342次閱讀
- AMD Kria KR260 DPU配置教程3 2139次閱讀
- AMD Kria KR260 DPU配置教程2 2799次閱讀
- AMD Kria KR260 DPU配置教程 1142次閱讀
- 基于AMD SOC的QT應(yīng)用程序開(kāi)發(fā) 1164次閱讀
- AMD-Xilinx FPGA功耗優(yōu)化設(shè)計(jì)簡(jiǎn)介 1534次閱讀
- petalinux安裝過(guò)程 3227次閱讀
- petalinux是什么?petallinux是如何設(shè)計(jì)的 1.3w次閱讀
- Docker里玩轉(zhuǎn)PetaLinux的上手教程 2526次閱讀
- ubuntu16.04如何安裝petalinux_2017.4 2625次閱讀
- Xilinx FPGA JTAG接口轉(zhuǎn)換成USB接口的方法 1.6w次閱讀
- 基于Ubuntu的PetaLinux安裝教程 6539次閱讀
- petalinux如何用SD卡上的設(shè)備樹(shù)_步驟教程 7989次閱讀
- petalinux(二)開(kāi)啟petalinux內(nèi)核調(diào)試模式 1.1w次閱讀
下載排行
本周
- 1DD3118電路圖紙資料
- 0.08 MB | 1次下載 | 免費(fèi)
- 2AD庫(kù)封裝庫(kù)安裝教程
- 0.49 MB | 1次下載 | 免費(fèi)
- 3PC6206 300mA低功耗低壓差線性穩(wěn)壓器中文資料
- 1.12 MB | 1次下載 | 免費(fèi)
- 4網(wǎng)絡(luò)安全從業(yè)者入門指南
- 2.91 MB | 1次下載 | 免費(fèi)
- 5DS-CS3A P00-CN-V3
- 618.05 KB | 1次下載 | 免費(fèi)
- 6海川SM5701規(guī)格書(shū)
- 1.48 MB | 次下載 | 免費(fèi)
- 7H20PR5電磁爐IGBT功率管規(guī)格書(shū)
- 1.68 MB | 次下載 | 1 積分
- 8IP防護(hù)等級(jí)說(shuō)明
- 0.08 MB | 次下載 | 免費(fèi)
本月
- 1貼片三極管上的印字與真實(shí)名稱的對(duì)照表詳細(xì)說(shuō)明
- 0.50 MB | 103次下載 | 1 積分
- 2涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 89次下載 | 1 積分
- 3錦銳科技CA51F2 SDK開(kāi)發(fā)包
- 24.06 MB | 43次下載 | 1 積分
- 4錦銳CA51F005 SDK開(kāi)發(fā)包
- 19.47 MB | 19次下載 | 1 積分
- 5PCB的EMC設(shè)計(jì)指南
- 2.47 MB | 16次下載 | 1 積分
- 6HC05藍(lán)牙原理圖加PCB
- 15.76 MB | 13次下載 | 1 積分
- 7802.11_Wireless_Networks
- 4.17 MB | 12次下載 | 免費(fèi)
- 8蘋(píng)果iphone 11電路原理圖
- 4.98 MB | 6次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191390次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81588次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65989次下載 | 10 積分
評(píng)論