跳转至

SGDMA

devmem2 → BAR 空间:FPGA 内部寄存器、DMA 引擎、AXI-Lite
lspci → 配置空间:Vendor ID、BAR 地址、链路状态、MSI 等
setpci → 配置空间的按字段读写

重新加载:sudo sh -c "echo 1 > /sys/bus/pci/rescan"
扫描:sudo lspci -vvv -s 01:00.0

cd ~/sgdma-linux-driver-master/sgdma_drv
sudo rmmod anlogic_pci
sudo insmod *.ko
sudo lspci -vvv -s 01:00.0

cd ~/sgdma-linux-driver-master/sgdma_app/script

cd ~/sgdma-linux-driver-master/sgdma_app/i3c_test

sudo ./i3c_24c02_test --write-verify 0xB0601000 0x12345678

sudo ./i3c_i2c_tool -b 0xB0601000 i2cdetect

I3C0:24C02,基地址 0xB0601000

sudo ./i3c_eeprom_test --24c02 0x12345678

I3C1:24C128,基地址 0xB0602000

sudo ./i3c_eeprom_test --24c128 0x12345678

两路独立 I²C 并行读写校验

sudo ./i3c_eeprom_test --parallel 0x12345678

0x00:Vendor ID / Device ID
0x04:Command / Status
0x10:BAR0
0x14:BAR1
0x34:Capabilities Pointer

BAR0 基址 = 0xb0600000,大小 1 MiB
BAR0 + 0x20:既会写入 axi_reg_ram[8], 也会被解析为 loopback / usr_cfgrw 控制命令。
BAR0 + 0x24:C2H/H2C 示例控制位。
BAR0 + 0x28:用户中断请求;读取时返回用户中断事件。
BAR0 + 0x0000 ~ BAR0 + 0x07FC(2044)

axi_reg_ram[0] ~ axi_reg_ram[511]
eg. sudo ./devmem2 0xb0600040 w 0x12345678

sudo ./devmem2 0xb0601000

BAR1 基址 = 0xb0700000,大小 64 KiB
BAR1 + 0x0000 = 0xb0700000 → H2C0 DMA 引擎
BAR1 + 0x1000 = 0xb0701000 → C2H0 DMA 引擎

H2C: sudo ./dma_mch -w 0 -s 0x100000 -v
test 0 finish: total_time=6500562ns, avg_time=6500562ns, avg_bw=161305437B/s(0.150227GB/s)

C2H: sudo ./dma_mch -r 0 -s 0x100000 -v
test 0 finish: total_time=5379077ns, avg_time=5379077ns, avg_bw=194936045B/s(0.181548GB/s)

环回禁止:sudo ./devmem2 0xb0680020 w 0x0
环回使能:sudo ./devmem2 0xb0680020 w 0x3
环回测试:sudo ./run_1ch_st.sh

中断测试(bit3/2): sudo ./devmem2 0xb0680028 w 0x0c
中断清除(bit3/2): sudo ./devmem2 0xb0680028 w 0x00
读取中断信息:sudo ./dmesg_show.sh