Xilinx ZC706 ADV7511使用

作者

QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118

参考

Linux with HDMI video output on the ZED, ZC702 and ZC706 boards
ADV7511 Xilinx Evaluation Boards Reference Design
Zynq & Altera SoC Quick Start Guide
analogdevicesinc/hdl
analogdevicesinc/linux
Linux_GUI加速(1)——GUI系统概述
Linux_GUI加速(2)——Linux中的DRM-KMS分析
2018.1/2 Zynq UltraScale+ MPSoC: Linux DRM driver does not need to update the plane for same framebuffer
linux-xlnx/drivers/gpu/drm下xilinx和xlnx这两个目录的区别
zynq-7000学习笔记(十一)——Linux下VDMA的使用
topic-embedded-products/adi_hdl
topic-embedded-products/kernel-module-vdmafb
ZedBoard Linux I2C Driver + VDMA使用
zynq-7000学习笔记(四)——Zedboard HDMI核的构建和输出显示测试(2017/6/9补充修改)
xilinx ZC706 在显示器上显示我们想显示的内容
【ZYNQ-7000开发之三】ZYNQ平台的HDMI驱动测试
FPGA+ADV7511实现HDMI显示
Zynq7020 在arm上跑hdmi驱动
zynq-7000学习笔记(九)——frame buffer图像显示编程
Building HDL
3. ZCU102 HDMI Demo工程修改【PCIE视频传输】

vivado

安装mingw,添加vivado工具到环境变量E:\Xilinx\Vivado\2015.2\bin,执行make,此次耗时较久,本以为卡住,敲了回车键才知道编译已经完成,

zc@DESKTOP-KVKC06A ~
$ cd /e/hdl-2015_r2/projects/adv7511/zc706

zc@DESKTOP-KVKC06A /e/hdl-2015_r2/projects/adv7511/zc706
$ ls
Makefile  system_bd.tcl  system_project.tcl  system_top.v

zc@DESKTOP-KVKC06A /e/hdl-2015_r2/projects/adv7511/zc706
$ make
make -C ../../../library/axi_clkgen
make[1]: Entering directory `/e/hdl-2015_r2/library/axi_clkgen'
rm -rf *.cache *.data *.xpr *.log component.xml *.jou xgui .Xil
vivado -mode batch -source axi_clkgen_ip.tcl  >> axi_clkgen_ip.log 2>&1
make[1]: Leaving directory `/e/hdl-2015_r2/library/axi_clkgen'
make -C ../../../library/axi_hdmi_tx
make[1]: Entering directory `/e/hdl-2015_r2/library/axi_hdmi_tx'
rm -rf *.cache *.data *.xpr *.log component.xml *.jou xgui .Xil
vivado -mode batch -source axi_hdmi_tx_ip.tcl  >> axi_hdmi_tx_ip.log 2>&1
make[1]: Leaving directory `/e/hdl-2015_r2/library/axi_hdmi_tx'
make -C ../../../library/axi_spdif_tx
make[1]: Entering directory `/e/hdl-2015_r2/library/axi_spdif_tx'
rm -rf *.cache *.data *.xpr *.log component.xml *.jou xgui .Xil
vivado -mode batch -source axi_spdif_tx_ip.tcl  >> axi_spdif_tx_ip.log 2>&1
make[1]: Leaving directory `/e/hdl-2015_r2/library/axi_spdif_tx'
rm -rf *.cache *.data *.xpr *.log *.jou xgui *.runs *.srcs *.sdk .Xil
vivado -mode batch -source system_project.tcl >> adv7511_zc706_vivado.log 2>&1

zc@DESKTOP-KVKC06A /e/hdl-2015_r2/projects/adv7511/zc706
$

可以看到,这个工程用到了三个库,

axi_clkgen
axi_hdmi_tx
axi_spdif_tx

参考ug954,ps的iic和pl的iic均可控制所有外设,
218

no-os

新建工程,添加源代码E:\no-OS-2015_R2\adv7511\zc706,添加库E:\no-OS-2015_R2\adv7511\library\zc,目录如下,刷新编译,
在这里插入图片描述
sdk2015.2.1好像有问题,在standalone模式下,头文件路径在这儿配置,
172
库目录在这儿配置,
173

no-os测试

输入0~6可以改变分辨率,实际测试这个程序输出的屏幕在闪烁,需要改进,

********************************************************************
  ADI HDMI Trasmitter Application Ver R1.1.1
  HDMI-TX:  ADV7511 Rev 0x14
  Created:  Aug  3 2019 At 11:13:28
********************************************************************

To change the video resolution press:
  '0' - 640x480;  '1' - 800x600;  '2' - 1024x768; '3' - 1280x720 
  '4' - 1360x768; '5' - 1600x900; '6' - 1920x1080.
Mute audio and video.
Resolution was changed to 1920x1080 
APP: Driver Enabled
HPD changed to HI
MSEN changed to HI
A new EDID segment was read.
HDMI device.
------------------------- EDID BLOCK 0 -------------------------
Edid Version 1.3
Mon Timing:
    Pixel clock = 241.50 MHz
    H Active    = 2560
    V Active    = 1440
    Progressive
    No stereo
    Separate sync = 3
    -ve Vsync
    +ve HSync
Mon Serial: NDY7355N1AWL

Mon Name:   DELL P2416D
                        
Mon Freq:
    Min V Freq = 49 Hz
    Max V Freq = 86 Hz
    Min H Freq = 29 KHz
    Max H Freq = 113 KHz
Edid extensions blocks: 1

========================= EDID BLOCK 1 =========================
CEA extension block revision 3
Underscan=Yes  Audio=Yes  YCbCr4:4:4=Yes  YCbCr4:2:2=Yes
Data block collection information:
    Video data block
       * VIC=16
         VIC=5
         VIC=4
         VIC=3
         VIC=2
         VIC=7
         VIC=22
         VIC=1
         VIC=6
         VIC=17
         VIC=18
         VIC=21
         VIC=19
         VIC=20
         VIC=31
         VIC=32
    Audio data block
       Format Code          = 1 (Linear PCM)
        Max. No. of Channels= 2
        Sampling Freq. (KHz)= 32  44.1  48  
        Length (bits)       = 16  20  24
    VSDB data block
    Speaker allocation data block
       0x01
       0x00
       0x00
SPA location is at 0x9D, SPA = 1.0.0.0
Mon Timing:
    Pixel clock = 148.50 MHz
    H Active    = 1920
    V Active    = 1080
    Progressive
    No stereo
    Separate sync = 3
    +ve VSync
    +ve HSync
Mon Timing:
    Pixel clock = 74.25 MHz
    H Active    = 1920
    V Active    = 540
    Interlaced
    No stereo
    Separate sync = 3
    +ve VSync
    +ve HSync
Mon Timing:
    Pixel clock = 74.25 MHz
    H Active    = 1280
    V Active    = 720
    Progressive
    No stereo
    Separate sync = 3
    +ve VSync
    +ve HSync
Mon Timing:
    Pixel clock = 27.0 MHz
    H Active    = 720
    V Active    = 480
    Progressive
    No stereo
    Separate sync = 3
    -ve Vsync
    -ve HSync
Mon Timing:
    Pixel clock = 197.0 MHz
    H Active    = 2048
    V Active    = 1152
    Progressive
    No stereo
    Separate sync = 3
    +ve VSync
    -ve HSync
########################### EDID END ###########################

APP: Changed system mode to Transmitter
Un-mute audio and video.
Resolution was changed to 1024x768 
Resolution was changed to 1600x900 
Resolution was changed to 1920x1080 

Linux

用到以下驱动,

  • compatible = "adi,adv7511";,位于drivers\gpu\drm\i2c\adv7511.c,xilinx官方有,但是版本不一样,使用ADI
  • compatible = "xlnx,axi-vdma";,位于drivers\dma\xilinx_dma.c,xilinx vdma驱动,在xilinx官方内核目录没有该文件,已经废弃或者是adi自己维护的,目前dma驱动位于位于drivers\dma\xilinx\xilinx_vdma.c,使用ADI,使用Xilinx则drm驱动编译不过,DMA的头文件不一样,更改驱动注册的name解决和官方驱动的冲突,官方2015.2.1和ADI 2015_R2内核版本不一样,内核dma驱动的api修改了,编写device_control完成device_config,添加并修改Kconfig/Makefile
  • compatible = "adi,axi-clkgen-2.00.a";,位于drivers\clk\clk-axi-clkgen.c,xilinx官方有,但是版本不一样,使用Xilinx
  • compatible = "adi,axi-hdmi-tx-1.00.a";,位于drivers\gpu\drm\adi_axi_hdmi\axi_hdmi_drv.c,xilinx官方没有,使用ADI,添加并修改Kconfig/Makefile,注意修改include\drm\drm_edid.h增加drm_connector_get_edid函数
  • compatible = "adi,axi-spdif-tx-1.00.a";,位于sound\soc\adi\axi-spdif.c,xilinx官方有,版本相同
  • compatible = "adv7511-hdmi-snd";,位于sound\soc\adi\adv7511_hdmi.c,xilinx官方没有,使用ADI,添加并修改Kconfig/Makefile

配置内核menuconfig,

> Device Drivers > Graphics support > Direct Rendering Manager > I2C encoder or helper chips > AV7511 encoder
> Device Drivers > Common Clock Framework > AXI clkgen driver
> Device Drivers > Graphics support > Direct Rendering Manager > AV7511 encoder
> Device Drivers > Graphics support > Direct Rendering Manager > DRM Support for Analog Devices HDMI FPGA platforms
> Device Drivers > Sound card support > Advanced Linux Sound Architecture > ALSA for SoC audio support > ADV7511 HDMI transmitter sound support

Linux开机打印,

...
[drm] Initialized drm 1.1.0 20060810
platform 70e00000.axi_hdmi_tx: Driver axi-hdmi requests probe deferral
...
adv7511-hdmi-snd amba_pl:adv7511_hdmi_snd: adv7511 <-> 75c00000.axi_spdif_tx mapping ok
...
Console: switching to colour frame buffer device 240x75
axi-hdmi 70e00000.axi_hdmi_tx: fb0:  frame buffer device
axi-hdmi 70e00000.axi_hdmi_tx: registered panic notifier
[drm] Initialized axi_hdmi_drm 1.0.0 20120930 on minor 0
...
ALSA device list:
  #0: HDMI monitor

这个时候可以在屏幕上看到串口的终端打印了,退出休眠

root@zynq:~# echo 1 > /sys/class/graphics/fb0/blank
root@zynq:~# echo -e "\033[9;0]" > /dev/tty0

Linux测试

注意ZC706的千兆网phy地址是7,需要检查u-boot和设备树是否正确。

Linux安装

官网下载image,拷入SD卡运行,xz文件用unxz解压,tar命令是不行的,

$ time unxz 2014_R2-2015_02_06.img.xz
$ sudo umount /dev/mmcblk0p1
$ time sudo dd if=2014_R2-2015_02_06.img of=/dev/mmcblk0 bs=4M

制作完后,SD卡包含两个分区,一个FAT32 BOOT分区,一个ext4根文件系统,重新插入PC,校验,

$ sudo fsck -y /dev/mmcblk0p1
$ sudo fsck -y /dev/mmcblk0p2

将SD卡对应板卡的BOOT.BIN等拷入BOOT分区,启动,可以看到adi定制的linaro桌面
168

Windows安装

  1. 使用7zip解压xz文件
  2. 使用Win32DiskImager或者physdiskwrite将img写入磁盘,physdiskwrite还支持命令行模式
>diskpart

Microsoft DiskPart version 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
On computer: RGETZ-L05

DISKPART> list disk

  Disk ###  Status         Size     Free     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---
  Disk 0    Online          119 GB      0 B
  Disk 1    Online         7580 MB      0 B

DISKPART> select disk 1

Disk 1 is now the selected disk.
DISKPART> clean

DiskPart succeeded in cleaning the disk.
DISKPART> exit

Leaving DiskPart...
>physdiskwrite.exe -u ..\2014_R2-2014_12_12.bin

physdiskwrite v0.5.2 by Manuel Kasper <mk@neon1.net>

Searching for physical drives...

Information for \\.\PhysicalDrive0:
   Windows:       cyl: 15566
                  tpc: 255
                  spt: 63
Information for \\.\PhysicalDrive1:
   Windows:       cyl: 966
                  tpc: 255
                  spt: 63

Which disk do you want to write? (0..1) 1
WARNING: that disk is larger than 2 GB! Make sure you're not accidentally
overwriting your primary hard disk! Proceeding on your own risk...
About to overwrite the contents of disk 1 with new data. Proceed? (y/n) y
3653238784/4096 bytes written in total
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值