0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【含案例源码】IMX8基于FlexSPI、PCIe与FPGA的高速通信开发详解!

Tronlong创龙科技 2021-09-02 14:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前 言

本文主要介绍i.MX 8M Mini基于FlexSPI、PCIe与FPGA的高速通信案例。

本文档适用开发环境:

Windows开发环境:Windows 7 64bit、Windows 10 64bit

虚拟机:VMware15.1.0

Linux开发环境:Ubuntu18.04.4 64bit

U-Boot:U-Boot-2020.04

Kernel:Linux-5.4.70

Linux SDK:5.4.70_2.3.0

*测试硬件平台:TLIMX8-EVM评估板(NXP i.MX 8M Mini)

案例一:主要演示ARM Cortex-A53通过FlexSPI接口读取FPGA(Spartan-6采集卡TL-HSAD-LX)发送的模拟数据,并进行校验,通过串口打印相关信息。实测速率为114.89MB/s。

案例二:主要演示ARM Cortex-A53通过PCIe接口与FPGA进行通信,实现对CameraLink相机图像的采集、编码和显示。实测传输帧率为60fps。

1 flexspi_read案例

1.1 案例说明

本案例主要演示ARM Cortex-A53通过FlexSPI接口读取FPGA(Spartan-6采集卡TL-HSAD-LX)发送的模拟数据,并进行校验,通过串口打印相关信息。

(1) 驱动默认配置FlexSPI为DDR模式(双边沿),配置FlexSPI的时钟源为400MHz,分频系数pre_divider和post_divider分别为2和5,此时FlexSPI的ROOT CLK时钟为400MHz/2/5 = 40MHz,DDR模式的传输时钟SCLK= ROOT SCLK/2 = 20MHz,数据位宽为8bit,即理论传输速率为40MB/s,实测速率为37.56MB/s。

(2) 驱动如配置FlexSPI为DDR模式(双边沿),配置FlexSPI的时钟源为400MHz,分频系数pre_divider和post_divider分别为1和3,此时FlexSPI的ROOT SCLK时钟为400MHz/1/3 = 133MHz,DDR模式的传输时钟SCLK = ROOT SCLK/2 = 66.5MHz,数据位宽为8bit,即理论传输速率为133MB/s,实测速率为114.89MB/s。

FPGA端:发送从0x00递增至0xFF的数据。

ARM端:读取数据并进行校验,打印误码率、读取速率和读取到的数据。

程序流程图如下:

4025651e7ef74aa38dbf445e48b8a7b4~tplv-tt-shrink:640:0.jpg

图 2

1.2 案例测试

2f0a8d063cb84dcfbb388e762898938f~tplv-tt-shrink:640:0.jpg

图 3

请按照上图进行硬件连接,并将案例bin目录下的可执行文件flexspi_read、“driver\bin\”目录下驱动文件flexspi_imx8.ko、“dts\image\”目录下的设备树文件tlimx8-evm-flexspi.dtb拷贝至评估板文件系统。采集卡TL-HSAD-LX加载或固化“data_to_flexspi\bin\”目录下的.bit或.mcs文件。在评估板文件系统flexspi_read文件所在路径下,执行如下命令查询程序参数说明。

Target# ls

Target# ./flexspi_read -h

9614baebb1a3482484ff4970246d4e40~tplv-tt-shrink:640:0.jpg

图 4

执行如下命令将默认使用的设备树tlimx8-evm.dtb进行备份,然后把tlimx8-evm-flexspi.dtb拷贝至“/run/media/mmcblk1p1/”目录并重命名为tlimx8-evm.dtb。

Target# cp
/run/media/mmcblk1p1/tlimx8-evm.dtb linux-tlimx8-evm.dtb//备份默认的tlimx8-evm.dtb,新文件名为linux-tlimx8-evm.dtb

Target# cp tlimx8-evm-flexspi.dtb /run/media/mmcblk1p1/tlimx8-evm.dtb

备注:更换设备树后,需重启评估板方可使设备树生效。

3ebc3cf38b7b405fbae5067a079d6ff3~tplv-tt-shrink:640:0.jpg

图 5

1.2.1 功能测试

执行如下命令加载FlexSPI驱动。

Target# insmod flexspi_imx8.ko

685ee452497d4785a44d726d49fdb71e~tplv-tt-shrink:640:0.jpg

图 6

执行如下命令进行测试。

Target# ./flexspi_read -a 0x08000000 -s 4096

691d8efd38824b3baba6c375506a2d4f~tplv-tt-shrink:640:0.jpg

图 7

本次测试速率为37.56MB/s,误码率为0,与理论速率40MB/s接近。

备注:受限于测试板卡的硬件连接形式的影响,37.56MB/s是零误码率时的最高实测速率。

若读取小于或等于2048Byte的数据时,每次读完需清空FlexSPI的RX Buffer,否则下次读取的数据是缓存在Buffer中的旧数据。

Target# devmem2 0x30bb0000 w 0xFFFF7031

bf7e990308474078aa5cc6a336592089~tplv-tt-shrink:640:0.jpg

图 8

1.2.2 性能测试

执行如下命令卸载flexspi驱动,并重新加载驱动。同时采集卡TL-HSAD-LX重新加载或固化FPGA程序。

Target# rmmod flexspi_imx8

Target# insmod flexspi_imx8.ko pre_divider=1 post_divider=3

备注:pre_divider和post_divider为分频系数,详细说明请查阅驱动说明章节。

f6f2185b17e14d9a8c8e229f1d81e277~tplv-tt-shrink:640:0.jpg

图 9

执行如下命令进行测试。

Target# ./flexspi_read -a 0x08000000 -s 4096

45fbe790f8e84ad4820d1d0e918be8d4~tplv-tt-shrink:640:0.jpg

图 10

可以看到本次测试速率为114.89MB/s,与理论速率133MB/s接近。

备注:受限于测试板卡的硬件连接形式的影响,此速率下的误码率为99.8%。

1.3 案例关键代码

(1) main函数

17d7f8c4ec384bb7b21e059291877954~tplv-tt-shrink:640:0.jpg

图 11

(2) 地址映射。

84abcee8ab8944eaa423359af176e02b~tplv-tt-shrink:640:0.jpg

图 12

(3) 读取数据。

c9d59ad447414899b1788219f3ddf0bf~tplv-tt-shrink:640:0.jpg

图 13

(4) 校验数据。

5437b786ddd1442c845ee9232f582152~tplv-tt-shrink:640:0.jpg

图 14

(5) 打印数据。

3e6433f99d9246b9b6989bbe4ae3b1ea~tplv-tt-shrink:640:0.jpg

图 15

1.4 FPGA工程关键代码

(1) 端口IO定义

flexspi_sclk和flexspi_ss0_n为输入信号,flexspi_data和flexspi_data为输出信号。

82772c16f9a340689e59bfcb733dfef4~tplv-tt-shrink:640:0.jpg

图 16

(2) 时钟输入信号flexspi_sclk设置为2倍频

7488544a2bbc499886b7a1e419338293~tplv-tt-shrink:640:0.jpg

图 17

(3) 数据发送

47f7f89710c04ac7b07dd5b87dfb6934~tplv-tt-shrink:640:0.jpg

图 18

e4693d0ac32b495ea2660251408fa72e~tplv-tt-shrink:640:0.jpg

图 19

2 gst_pcie_enc案例

2.1 案例说明

本案例主要演示ARM Cortex-A53通过PCIe接口与FPGA进行通信,实现对CameraLink相机图像的采集、编码和显示。其中ARM端获取到的原始图像通过dma-buf机制,在采集、硬件编码和显示输出等功能中进行共享,可实现高效的图像数据“零拷贝”的录播方案。

FPGA端:

(1) 采集CameraLink相机图像;

(2) 通过XDMA IP实现为PCIe EP设备,RC端可通过PCIe接口访问FPGA端DDR以及对VDMA IP的寄存器进行配置。

ARM端:

(1) 作为PCIe RC设备,配置VDMA IP将图像存储到FPGA DDR指定位置、将图像从FPGA DDR通过XDMA搬运到ARM端DDR;

(2) 调用协处理器VPU进行H264硬件编码,并将编码后的数据存储到文件;

(3) 编码的同时,通过HDMI显示实时图像。

程序工作流程框图如下所示:

4545b5a9ed3e42b6a876b25ca85f3226~tplv-tt-shrink:640:0.jpg

图 20

2.2 案例测试

请参考下图,将创龙科技的TLCamerLinkF模块连接至TLK7-EVM评估板的FMC2接口,TLK7-EVM评估板J1跳线帽选择1.8V档位,以配置FMC IO的BANK电压为1.8V。将CameraLink相机的CL0通过数据线连接至TLCameraLinkF模块的CameraLink1接口。再将TLK7-EVM评估板的PCIe插到TLIMX8-EVM评估板的PCIe插槽上,使用HDMI线缆连接TLIMX8-EVM评估板的HDMI OUT接口至HDMI显示屏。

97696026b59843818e8de4970b13b7aa~tplv-tt-shrink:640:0.jpg

图 21

将该案例bin目录下的驱动文件xdma-video.ko拷贝至TLIMX8-EVM评估板文件系统中,并将案例bin目录下的.bit或.bin文件加载或固化到TLK7-EVM评估板。

评估板上电,可执行lspci命令检查PCIe连接是否正常。如不能获取到如下信息,请检查硬件连接和FPGA端是否正常运行。

Target# lspci

d1736435f45445268926196d450191c7~tplv-tt-shrink:640:0.jpg

图 22

Target# insmod xdma-video.ko debug=1

备注:“debug=1”表示打印帧率信息,可根据实际需求选择是否配置。若需修改分辨率和帧率,可执行命令“insmod xdma-video.ko width=1280 height=1024 fps=60”,具体的分辨率和帧率大小,请以相机实际可支持范围为准,分辨率参数需和相机分辨率参数匹配,帧率参数仅作用于软件上相机参数,不影响实际的相机帧率。

366b507912404c949612dfcf07aa8b7e~tplv-tt-shrink:640:0.jpg

图 23

执行如下命令进行图像的采集、编码和显示,编码后的test.264文件将保存在当前目录下。

Target# gst-launch-1.0 -v -e v4l2src device=/dev/video1 ! "video/x-raw, format=(string)NV12, width=(int)1280, height=(int)1024" ! tee name=t ! queue ! vpuenc_h264 ! h264parse ! filesink location=test.264 t. ! queue ! waylandsink

其中"/dev/video1"为设备节点,请以实际节点为准,1280和1024为图像的宽和高。

005bd421650547549ffd686b0b152647~tplv-tt-shrink:640:0.jpg

图 24

执行成功后可观察到如下输出,串口不停打印帧率,并在HDMI显示器上观看到实时图像。

备注:帧率显示为61fps,是由于CameraLink相机输出的并不是标准的60fps图像。

5288cc2e7bd641c482a7401b15cf6e68~tplv-tt-shrink:640:0.jpg

图 25

2faa23eb4e264b1bb99f8abef5c24213~tplv-tt-shrink:640:0.jpg

图 26

按下“Ctrl+C”停止录制后,将在当前目录生成test.264文件,并可观察到实际帧率为59.954fps。

b367da73bedc4abd97fc4fe75615226e~tplv-tt-shrink:640:0.jpg

图 27

执行如下命令播放编码后的视频,HDMI显示器显示对应图像。

Target# gst-play-1.0 test.264

121debb7678c4b85a032d1c39758d184~tplv-tt-shrink:640:0.jpg

图 28

4dacffe0c5f24696be7b08789055f7b2~tplv-tt-shrink:640:0.jpg

图 29

播放结束后,将打印视频时长、帧率信息。

581f5d7cae264ee485ae483be28753f9~tplv-tt-shrink:640:0.jpg

图 30

备注:由于码流文件中不包含播放帧率信息,因此在执行“gst-play-1.0 test.264”时未能按60fps进行播放。从串口打印信息可知,实际是以30fps进行播放,并且播放时长为录制时长的两倍。在录制时,将H264码流封装成MP4格式可解决此问题,因为封装成MP4格式时,播放帧率信息将被记录在MP4文件中。

执行如下命令,可将H264码流保存成MP4文件。

Target# gst-launch-1.0 -v -e v4l2src device=/dev/video1 ! "video/x-raw, format=(string)NV12, width=(int)1280, height=(int)1024" ! tee name=t ! queue ! vpuenc_h264 ! h264parse ! qtmux ! filesink location=test.mp4 t. ! queue ! waylandsink

e1ffeca30a93417bb37f27a7d7fb963a~tplv-tt-shrink:640:0.jpg

图 31

68a32b7c737a4bc4b5986c855122760f~tplv-tt-shrink:640:0.jpg

图 32

注意:H264码流保存成MP4文件,程序可正常工作,录制的视频文件播放帧率正常,但系统会出现概率性的丢帧。为了避免这种情况,在实际的应用编程中,建议将MP4的保存功能另外建立一个pipeline进行,或改用其它开源MP4库进行开发。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dsp
    dsp
    +关注

    关注

    561

    文章

    8277

    浏览量

    368451
  • FPGA
    +关注

    关注

    1664

    文章

    22509

    浏览量

    639559
  • 嵌入式
    +关注

    关注

    5210

    文章

    20680

    浏览量

    337397
  • Linux
    +关注

    关注

    88

    文章

    11822

    浏览量

    219603
  • FPGA开发板
    +关注

    关注

    10

    文章

    130

    浏览量

    32508
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    imx95 板中的保险丝写入错误怎么办

    ulp_... 我已经为几个基于 imx6 和 imx8 的 otp 融合了,但从未收到过此错误。有人知道为什么这些保险丝命令在 imx95 中不起作用吗?任何类型的支持/信息都会非常有帮助。谢谢!
    发表于 04-15 10:20

    无法在 Zephyr 中的单个 FlexSpi 上配置两个 NOR 闪存?

    ,imx-flexspi-nor\";size = ;/* 8MB (64Mbit) flash */reg = <2>;/* FlexSPI B */spi-max-frequency
    发表于 04-15 06:19

    PCIE702-2】PCIe 开发板- XCKU115 FPGA开发板- 高性能数据预处理板

    PCIE702-2 是一款基于 PCIE 总线架构的 XCKU115 FPGA 高性 能数据预处理 平台,该平台具有 1 个 FMC+(HPC)接口,1 路 PCIe x
    的头像 发表于 03-02 14:20 280次阅读
    【<b class='flag-5'>PCIE</b>702-2】<b class='flag-5'>PCIe</b> <b class='flag-5'>开发</b>板- XCKU115 <b class='flag-5'>FPGA</b><b class='flag-5'>开发</b>板- 高性能数据预处理板

    PCIe通信就是快,RK3576+FPGA解决方案

    今天给大家带来基于PCIe的RK3576+FPGA高速通信方案,实现快速数据交互,解决工业采集“慢、卡、丢”难题,为工业自动化、能源电力等领域提供创新解决方案。
    的头像 发表于 12-26 17:46 876次阅读
    <b class='flag-5'>PCIe</b><b class='flag-5'>通信</b>就是快,RK3576+<b class='flag-5'>FPGA</b>解决方案

    探索DS80PCI800:PCIe高速通信的理想选择

    探索DS80PCI800:PCIe高速通信的理想选择 在当今的电子设备中,高速数据传输和处理的需求日益增长。PCI Express(PCIe
    的头像 发表于 12-24 14:55 400次阅读

    探索FRDM - IMX8MPLUS开发板:开启嵌入式开发新旅程

    探索FRDM - IMX8MPLUS开发板:开启嵌入式开发新旅程 作为电子工程师,我们总是在寻找性能卓越、功能丰富且易于上手的开发板,以满足不同项目的需求。NXP的FRDM -
    的头像 发表于 12-24 11:00 537次阅读

    基于瑞芯微 RK3588 的 ARM 与 FPGA 交互通信实战指南

    本文围绕创龙科技研发的 TL3588-EVM 评估板,详解瑞芯微 RK3588 与 FPGA 基于 PCIe 总线的通信案例,包括 DMA 与非 DMA 两种方式。涵盖案例功能、测试流
    的头像 发表于 11-04 16:09 810次阅读
    基于瑞芯微 RK3588 的 ARM 与 <b class='flag-5'>FPGA</b> 交互<b class='flag-5'>通信</b>实战指南

    PCIE737】青翼凌云科技基于全高PCIe x8总线的KU115 FPGA高性能硬件加速卡

    PCIE737是一款基于PCIE总线架构的KU115 FPGA的12路光纤通道处理平台,该板卡具有1个PCIe Gen3x8主机接口、3个
    的头像 发表于 11-03 16:31 921次阅读
    【<b class='flag-5'>PCIE</b>737】青翼凌云科技基于全高<b class='flag-5'>PCIe</b> x<b class='flag-5'>8</b>总线的KU115 <b class='flag-5'>FPGA</b>高性能硬件加速卡

    【开源FPGA硬件】硬件黑客集结:开源FPGA开发板测评活动全网火热招募中......

    布以来,得到了众多开发者的关注,涉及工业、通信、车载等多个行业的100+位工程师报名参与设计,并分为:硬件组、FPGA组、Linux组。 其中硬件组率先开始启动项目,经过和所有报名硬件组的工程师沟通,最终
    发表于 10-29 11:37

    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—物联网模块开发案例

    PCIe WIFI6 模块 STA 与 AP 模式测试及 TCP 带宽测试,4G 模块网络、短信、通话、GPS 定位测试,还详解各模块驱动编译步骤,为评估板物联网应用
    的头像 发表于 09-28 11:31 695次阅读
    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业<b class='flag-5'>开发</b>板—物联网模块<b class='flag-5'>开发</b>案例

    PCIe协议分析仪能测试哪些设备?

    场景:监测GPU与主机之间的PCIe通信,分析数据传输效率、延迟和带宽利用率。 应用价值:优化大规模AI训练任务的数据加载和模型参数同步,例如在多GPU系统中测试PCIe交换机的性能和稳定性。
    发表于 07-25 14:09

    火爆开发中 | 开源FPGA硬件板卡,硬件第一期发布

    开源FPGA项目自发布以来,得到了众多开发者的关注,涉及工业、通信、车载等多个行业的100+位工程师报名参与设计,并分为:硬件组、FPGA组、linux组。其中硬件组率先开始启动项目,
    发表于 07-09 13:54

    拥抱开源!一起来做FPGA开发板啦!

    案例的FPGA工程文件(源码)、实验详细说明文档(原理+实现思路+操作说明)。 三、Linux嵌入式组 主要负责开发板的Linux操作系统移植、驱动
    发表于 06-06 14:05

    【每周推荐】基于STM32开发项目实例下载(PCB、原理图、源码等)

    1、手机APP远程控制,智能家居监测、智能控制系统(源码)手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码)项目实例下载!2、基于STM32蓝牙控制小车系统
    的头像 发表于 05-27 08:05 1514次阅读
    【每周推荐】基于STM32<b class='flag-5'>开发</b>项目实例下载(<b class='flag-5'>含</b>PCB、原理图、<b class='flag-5'>源码</b>等)

    每周推荐!基于STM32开发项目实例下载(PCB、原理图、源码等)

    1、手机APP远程控制,智能家居监测、智能控制系统(源码) 手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码) 项目实例下载! 2、基于STM32蓝牙控制小车系统
    发表于 05-26 14:01