資料介紹
描述
本教程是關于“Rpi SenseHAT 與 AMD-Xilinx Kria KR260 和 Petalinux 的接口”。
本教程中使用的工具有:
- 維瓦多 2022.2
- 花瓣 2022.2
Rpi-SenseHAT 的 VIVADO/Petalinux 項目源碼、BSP、Kria 固件可在 Github 獲取:https://github.com/LogicTronix/KR260-SenseHAT-Petalinux [ Git Branch: SenseHAT-Sensors ]
樹莓派感知帽子
Raspberry Pi Sense HAT是一個附加板,可提供一系列傳感功能。機載傳感器使我們能夠監控壓力、濕度、溫度、顏色、方向和運動。8x8 RGB LED 矩陣讓我們能夠可視化來自傳感器的數據,五鍵操縱桿可以充當輸入設備。
板上的所有傳感器都連接到單個 I2C 總線。所有的傳感器都充當從機,并使用 I2C 協議與主機進行通信。
Sense Hat 上使用的 IC:
Vivado 設計流程
設計中使用的 IP
以下是 Vivado 設計中使用的 IP 內核,用于創建在 Kria KR260 上運行的“Sense HAT-I2C 接口”。
Zynq? Ultrascale+? MPSoC
Zynq? Ultrascale+? MPSoC 充當 PS 和 PL 之間的邏輯連接,同時協助使用 Vivado? IP 集成器將定制和嵌入式 IP 與處理系統集成。
AXI 中斷控制器
AXI 中斷控制器 (AXI INTC) 內核將來自外圍設備的多個中斷輸入集中到系統處理器的單個中斷輸出。
時鐘向導
Clocking Wizard IP 簡化了為根據用戶時鐘要求定制的時鐘電路創建 HDL 源代碼包裝器的過程。該向導指導用戶為您的時鐘原語設置適當的屬性,并允許覆蓋任何向導計算的參數。
AXI IIC 總線接口
AXI IIC 總線接口連接到 AMBA? AXI 規范,并為大量流行設備提供低速、雙線、串行總線接口。本產品規范定義了 AXI IIC 總線接口模塊的架構、硬件(信號)接口、軟件(寄存器)接口和參數化選項。
處理系統重置
處理系統復位是一個軟 IP,它提供了一種機制來處理給定系統的復位條件。內核在輸入端處理多種復位條件,并在輸出端生成適當的復位。該內核根據外部或內部復位條件生成復位。
AXI互連
AXI 互連 IP 將一個或多個 AXI 內存映射主設備連接到一個或多個內存映射從設備。AXI 互連內核允許 AXI 主設備和從設備的任意組合連接到它,這些設備在數據寬度、時鐘域和 AXI 子協議(AXI4、AXI3 或 AXI4-Lite)方面可能各不相同。
塊設計-完整的塊設計
Sense HAT - KR260 接頭對齊
如上圖所示,Sense HAT 位于 KR260 上的 RPi 接頭上方。此對齊顯示了 40 個引腳的描述。傳感器通過使用引腳 3 和 5 的 I2C 進行通信。
約束
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}]
但是,下圖可用作映射和約束所有其他引腳的參考。
生成 XSA
- 從“文件”菜單中,選擇“導出”>“導出平臺”。
- 在平臺類型窗口中選擇硬件選項。
- 選擇 Pre-Synthesis 狀態,并在 Platform State 窗口中選擇 Include bitstream 選項。
- 更改所需的平臺屬性。
- 輸入 XSA 的名稱并選擇要將 XSA 導出到的文件夾,然后選擇完成。
Petalinux 流程:
Sense HAT 傳感器的驅動程序可用性
為了集成 SenseHAT 傳感器,我們必須擁有這些傳感器的 Petalinux 驅動程序或 linux 驅動程序。對于 SenseHAT,大多數傳感器的 C/C++ 驅動程序都可以從供應商那里獲得。一些驅動程序也是由獨立開發人員編寫的。
濕度/溫度
加速度計/陀螺儀和磁力計
壓力/溫度
- https://github.com/ameltech/sme-lps25h-library
- https://github.com/kirananto/RaZorReborn/tree/master/drivers/sensors/pressure/lps25h
Petalinux 開發:
先決條件
創建 petalinux 項目需要支持的 BSP,可從以下鏈接下載。也可以在沒有 BSP 的情況下創建項目,但不太方便。
- 從 Xilinx 下載為開發板下載支持的 BSP。
- 下載鏈接:https://www.xilinx.com/member/forms/download/xef.html? filename=xilinx-kr260-starterkit-v2022.2-10141622.bsp
創建、配置和構建 Petalinux 項目
下面列出了創建 petalinux 項目的步驟。
● 創建一個文件夾并復制從Vivado 導出的平臺(XSA)。
● 同時復制 Vivado 生成的 BIN 文件,位于 /.runs/impl_1/.bin
● 在目錄中打開終端并獲取petalinux 腳本。
● 運行以下命令創建名為 的petalinux 項目。
petalinux-create --type project -s to-bsp> --name name>
● 運行以下命令配置項目。
petalinux-config --get-hw-description
● 在項目配置窗口中,
○ 在 FPGA 管理器下啟用 FPGA 管理器。
- 在圖像打包配置下,
- 將根文件系統類型更改為 INITRD
- 將 INITRAMFS/INITRD 映像名稱更改為 petalinux-initramfs-image
- 禁用 Copy final images to tftpbootUnder Image Packaging Configuration,
- 保存并退出配置窗口。
- 運行以下命令來配置內核。
petalinux-config -c kernel
- 保存并退出配置。
- 運行以下命令來配置根文件系統。
petalinux-config -c rootfs
- 在 Filesystem Packages > base > i2c-tools 下,啟用
- i2c-工具
- i2c-工具-dev
- 保存并退出配置。
- 運行petalinux-build來構建項目。
生成/創建可引導映像
- 運行以下命令以創建可引導的 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/ 目錄中。
- 下載、安裝并運行 BalenEtcher。
- 在 images/linux 目錄中找到 WIC 映像。
- 選擇目標設備并選擇 Flash。
準備覆蓋:
生成設備樹覆蓋
- 在復制 XSA 的目錄中打開終端。在這里再次獲取 Petalinux 并運行xsct命令。
- 如果系統找不到 xsct 命令,請確保獲取 Vitis 或 PetaLinux shell 腳本。
- 如果在運行 Petalinux shell 腳本后 xsct 命令仍然缺失,請運行以下命令。
PATH="${XSCT_TOOLCHAIN}/bin:${PATH}"
- 運行以下“HSI”命令將在當前目錄中提取 XSA 的內容。
hsi::open_hw_design ./.xsa
createdts -hw ./name>.xsa -zocl -platform-name platform-name> -git-branch -overlay -compile -out ./name-is-better>
- 運行上面的命令將:
- 從 Xilinx 設備樹生成器 repo 克隆分支
- 在.////psu_cortexa53_0/device_tree_domain/bsp/ 目錄
- 退出xsct外殼。
注意:以下命令可以在沒有 Petalinux 腳本源的常規終端中運行。
- 運行以下命令編譯設備樹。
dtc -@ -O dtb -o ./kr260.dtbo ./kr260_dt/kr260_dt/kr260/psu_cortexa53_0/device_tree_domain/bsp/pl.dtsi
- 確保編輯 pl.dtsi 的路徑。
- 此命令將在當前目錄中生成 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 標志。
make install
- 運行上面的命令將在 $HOME/bin.. 中安裝 dtc
重試編譯設備樹
- 運行 cd../ 移出 dtc 目錄
- dtc -@ -O dtb -o./kr260.dtbo./kr260_dt/kr260_dt/kr260/psu_cortexa53_0/device_tree_domain/bsp/pl.dtsi
將文件傳輸到設備
- 運行以下命令創建 shell.json。
echo '{ "shell_type" : "XRT_FLAT", "num_slots": "1" }' > shell.json
- 將 Vivado 實現目錄中的 bin 文件重命名為您命名 dtbo 的相同名稱。
- 我已將它們重命名為 kr260.bit.bin 和 kr260.dtbo。
- 將 Sense HAT 連接到 KR260 接頭。
- 現在啟動設備并登錄。
- 用戶名和密碼默認為petalinux 。
- 在設備主目錄中創建一個目錄。
mkdir ~/<any-directory-name>
- 將您的設備連接到路由器并通過運行 ifconfig 命令查找 IP 地址。如果您在路由器設置中為設備分配靜態 IP 會更好。
- 在主機上運行 scp 命令以將文件傳輸到設備。
scp ./kr260.bit.bin ./kr260.dtbo ./shell.json petalinux@:~/
在 I2C 總線上加載覆蓋和檢測設備
- 將包含 kr260.bit.bin、kr260.dtbo 和 shell.json 的目錄移動到 /lib/firmware/xilinx/。
sudo mv ./ /lib/firmware/xilinx/
- 列出設備上存在的應用程序。
sudo xmutil listapps
- 卸載當前應用程序。
sudo xmutil unloadapp
- 加載您的應用程序(在本例中為 kr260)。
sudo xmutil loadapp kr260
- 檢查 XIIC 是否在系統中被列為 I2C 總線。
i2cdetect -l
- 這將列出系統中的所有 I2C 總線(在本例中為 i2c-7)。
- 檢查 XIIC 總線上的設備。
I2cdetect -y -r <i2c-bus-number>
- 這將顯示連接到 I2C 總線的傳感器的地址。
- 如果 Sense Hat 正在工作,它應該顯示以下地址。
- 以下 I2C 總線 7 的地址映射顯示了來自 Sense HAT 的所有傳感器地址。這些地址也在表 1 中列出。
使用 Python 與傳感器通信
要使用 python 與連接到總線的傳感器進行通信,需要安裝 python 包。
安裝 pip,Python 的包安裝程序
要安裝所需的包,需要 pip。由于 petalinux 沒有啟用 pip 的選項,因此應手動安裝。
值得慶幸的是,安裝 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 smbus。SMBus 通過 i2c-dev 為 Linux SMBus 訪問提供 python 綁定。
編寫一個粗糙的 python 應用程序
為了與傳感器通信,我們需要一個 SMBus 類的對象,它為我們提供了使通信更容易的各種功能。我們通過傳遞傳感器所連接的 I2C 總線編號來創建 SMBus 類的新實例。
bus = smbus.SMBus(<i2c-bus-number>)
使用總線對象,我們可以訪問以下功能,幫助我們從/向傳感器寄存器讀取/寫入數據。
為了從傳感器獲取數據,我們將特定字節數據寫入控制寄存器,以啟用/禁用設備中的某些功能。最重要的一步是將傳感器置于活動模式,這將開始感應并將結果存儲在其內部寄存器中。然后我們可以讀取這些寄存器并使用也存儲在其他寄存器中的校準數據進行計算。
校準數據存儲在內部非易失性存儲器中,并在開機時寫入校準寄存器。
有關寄存器及其描述的詳細信息,請查看傳感器的數據表。
與傳感器通信的通用方式
設備上的所有傳感器都遵循類似的配置和校準方法。
- 設置輸出數據速率和平均
- 輸出數據速率指定更新輸出數據的頻率
- 平均給出所選樣本數量的平均值
- 激活傳感器
- 讀取并存儲校準數據
- 讀取輸出值并應用校準
代碼片段
# 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 傳感器的溫度和濕度讀數
LPS25H 傳感器的溫度和壓力讀數
LSM9DS1 傳感器的加速度、磁力計和陀螺儀讀數
本教程的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] 創建了這個“深入”教程!
- Kria KV260視覺AI入門套件用戶指南
- Kria KR260機器人入門套件:通過硬件加速釋放機器人
- 適用于AWS IoT Greengrass的Xilinx KV260入門指南
- 創建自定義Kria KV260加速ML應用程序
- Xilinx KV260 Vitis-AI 1.4人臉檢測
- 為Kria KV260添加USB WiFi
- Kria KV260 AI視覺套件入門
- Xilinx Kria KV260套件的第一個硬件項目
- Vivado 2021.1中的Kria KV260入門
- 使用Xilinx Kria KV260進行AI火災探測
- Xilinx KV 260構建一個人臉識別車庫門鎖
- Kria KV260上的動態交通燈系統
- PetaLinux 2020.1 ubuntu 安裝
- 基于XILINX的SPARTAN板的VGA接口顯示程序 8次下載
- 利用XILINX解決方案快速創建存儲器接口設計
- 使用Python提取ILA數據的流程 468次閱讀
- AMD Xilinx 7系列FPGA的Multiboot多bit配置 991次閱讀
- AMD Kria KR260 DPU配置教程3 1098次閱讀
- AMD Kria KR260 DPU配置教程2 1840次閱讀
- AMD Kria KR260 DPU配置教程 862次閱讀
- 基于AMD SOC的QT應用程序開發 908次閱讀
- AMD-Xilinx FPGA功耗優化設計簡介 1276次閱讀
- petalinux安裝過程 2866次閱讀
- petalinux是什么?petallinux是如何設計的 1.2w次閱讀
- Docker里玩轉PetaLinux的上手教程 2345次閱讀
- ubuntu16.04如何安裝petalinux_2017.4 2518次閱讀
- Xilinx FPGA JTAG接口轉換成USB接口的方法 1.6w次閱讀
- 基于Ubuntu的PetaLinux安裝教程 6399次閱讀
- petalinux如何用SD卡上的設備樹_步驟教程 7810次閱讀
- petalinux(二)開啟petalinux內核調試模式 1w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多