【RT摩拳擦掌】RT1170 AVB初体验

一, 文档说明

AVB(Audio Video Bridging),即音视频桥接技术,AVB也是时间敏感网络。主要用来解决局域网内的音视频传输问题:延时问题和同步问题。
AVB由一系列的IEEE标准组成,目的在于局域网中高效传输音视频数据。AVB的协议如下:
在这里插入图片描述

图 1
AVB主要是链路层的协议,和传统TCP/IP协议是并列共存关系。
AVB相关的协议有:

  • gPTP (IEEE 802.1AS-2020) :精确时间同步协议
  • AVTP (IEEE 1722-2016) :音视频传输协议
  • FQTSS (IEEE 802.1Q-2018, section 34) :流量整形协议
  • SRP (IEEE 802.1Q-2018, section 35) :带宽预留协议
  • AVDECC (IEEE 1722.1-2013) :音视频管理协议
  • EST (IEEE 802.1Qbv-2015)
  • FP (IEEE 802.3br-2016/IEEE 802.1Qbu-2016)

AVB的拓扑图如下:
在这里插入图片描述

图 2
End Station:Listener和Talker两种:

  • Listener:接受音视频数据的节点
  • Talker: 输出音视频数据的节点
    AV Bridge:音视频网关
    本文目的不是主讲AVB协议,作为RT1170的AVB初体验篇,主要给出如何使用官方提供的AVB/TSN协议栈在NXP MIMXRT1170-EVK板子上实现AVB音频数据的传输功能。

二, RT1170 AVB初体验

2.1 硬件准备

2*MIMXRT1170-EVK REV C4,一块作为Talker,一块作为Listener。
引脚修改点:去掉板载R228, R234, R232, R229电阻。
板子默认配置:
J27:1-2
J5,J6,J7,J8:短接
J38:5-6
SW1: 1-OFF,2-OFF,3-ON,4-OFF
SW2: 1-OFF,2-OFF,3-OFF,4-OFF,5-OFF,6-OFF,7-OFF,8-OFF,9-OFF,10-OFF
J11:代码下载和串口
J4 : 1G ENET用于AVB通信
在这里插入图片描述

图 3

2.2 软件工具准备

2.2.1 相关代码

SDK_2_13_0_MIMXRT1170-EVK:
https://mcuxpresso.nxp.com/en/builder?hw=MIMXRT1170-EVK&rel=667
根据需要使用的系统(windows/linux)下载对应的SDK,比如Linux下载Linux版本,windows下载windows版本。本文以linux编译系统为例,下载Linux版本。
genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0.zip:
https://mcuxpresso.nxp.com/en/dashboard?download=84124a72b3f5916f99168a06ef287f2f
genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0文件包含如下:
在这里插入图片描述

图4
Binaries:包含了RT1170 AVB/TSN bin文件,RT1050 AVB bin文件。
Doc:相关文档,很重要,建议先阅读。
Genavb-apps-freertos-5_6_0:GenAVB/TSN 例程源码
genavb-sdk –5_6_0.tar.gz GenAVB/TSN SDK支持的配置和设备
.patch:GenAVB/TSN 对于 RT1170,RT1050 SDK的补丁

2.2.2 相关软件工具

1) linux平台
•CMake (>= 3.10.2, tested with 3.16.3)
• make
• unzip
• patch
2) windows平台
•CMake (>= 3.10, tested with 3.22.1)
• minGW-w64 (tested with 4.3.5)
• 7zip
• Git with git bash (necessary for patch utility)
本文使用了linux ubuntu平台,软件版本如下:
在这里插入图片描述

图 5
这里有个小经验,因为笔者的Ubuntu版本比较低,安装的cmake版本也低,为了安装cmake 3.16.3,遇到了一些小问题,这里予以分享。
首先下载cmake-3.16.3-Linux-x86_64.tar.gz:
https://github.com/Kitware/CMake/releases/download/v3.16.3/cmake-3.16.3-Linux-x86_64.tar.gz
解压cmake-3.16.3-Linux-x86_64.tar.gz获得cmake-3.16.3-Linux-x86_64:

tar -zxvf cmake-3.16.3-Linux-x86_64.tar.gz

添加软链接到/usr/bin/cmake:

sudo ln -s /home/nxa07323/TSN_GENAVB/cmake-3.16.3-Linux-x86_64/bin/cmake /usr/bin/cmake

在/usr/bin/cmake路径下ls -al,可以查看到软链接:
在这里插入图片描述

图 6
经过如上操作,使用cmake –version即可查看到图5中cmake的版本已经为:cmake 3.16.3

2.2.2 代码配置

编译AVB代码需要结合RT1170 SDK,具体步骤如下:
解压genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0.zip和SDK_2_13_0_MIMXRT1170-EVK_linux.zip
在这里插入图片描述

图 7
进入到SDK_2_13_0_MIMXRT1170-EVK_linux解压文件夹路径下,添加genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0/ mcuxpresso-sdk-SDK_2_13_0_MIMXRT1170-EVK-5_6_0.patch
Patch 命令如下:
$ patch -p1 < path/to/mcuxpresso-sdk-SDK_2_13_0_MIMXRT1170-EVK-5_6_0.patch
本文操作如下:

patch -p1 < /home/nxa07323/avbdoc/genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0/mcuxpresso-sdk-SDK_2_13_0_MIMXRT1170-EVK-5_6_0.patch

在这里插入图片描述

图 8
分别给SDK和AVB SDK添加软链接,软链接结构如下:
genavb-apps-freertos-5_6_0
├── boards
│ ├── evkbimxrt1050
│ │ ├── demo_apps
│ │ └── mcu-sdk -> /path/to/SDK_2_13_0_EVKB-IMXRT1050 (required for RT1052)
│ ├── evkmimxrt1170
│ │ ├── demo_apps
│ │ └── mcu-sdk -> /path/to/SDK_2_13_0_MIMXRT1170-EVK (required for RT1176)
│ └── src
│ └── demo_apps
└── gen_avb -> /path/to/genavb-sdk-5_6_0
对于RT1170主要有两个软链接:
1) 为avb SDK板级添加芯片SDK路径:
$ cd path/to/genavb-apps-freertos-5_6_0/boards/evkmimxrt1170
$ ln -s path/to/SDK_2_13_0_MIMXRT1170-EVK mcu-sdk
本文实例:
为路径/home/nxa07323/avbdoc/genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0/genavb-apps-freertos-5_6_0/boards/evkmimxrt1170
添加SDK路径链接:/home/nxa07323/avbdoc/SDK_2_13_0_MIMXRT1170-EVK_linux
首先需要解压genavb-apps-freertos-5_6_0.tar.gz

tar -zxvf genavb-apps-freertos-5_6_0.tar.gz

在这里插入图片描述

图9
命令:

cd /home/nxa07323/avbdoc/genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0/genavb-apps-freertos-5_6_0/boards/evkmimxrt1170
ln -s /home/nxa07323/avbdoc/SDK_2_13_0_MIMXRT1170-EVK_linux mcu-sdk

在这里插入图片描述

图 10
可以看到已经在genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0/genavb-apps-freertos-5_6_0/boards/evkmimxrt1170路径下添加了SDK的路径,并且链接名为:mcu-sdk
2)添加GENAVB/TSN SDK路径到AVB app顶层软链接
$ cd path/to/genavb-apps-freertos-5_6_0/
$ ln -s path/to/genavb-sdk-5_6_0 gen_avb
为路径/home/nxa07323/avbdoc/genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0/genavb-apps-freertos-5_6_0/
添加AVB SDK路径链接:/home/nxa07323/avbdoc/SDK_2_13_0_MIMXRT1170-EVK_linux
解压genavb-sdk-5_6_0.tar.gz

tar -zxvf genavb-sdk-5_6_0.tar.gz

在这里插入图片描述

图 11
软链接命令:

cd /home/nxa07323/avbdoc/genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0/genavb-apps-freertos-5_6_0
ln -s /home/nxa07323/avbdoc/genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0/genavb-sdk-5_6_0 gen_avb

在这里插入图片描述

图12
可以看到,/home/nxa07323/avbdoc/genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0/genavb-apps-freertos-5_6_0的软链接也添加成功。

2.3 代码编译

编译路径:
genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0/genavb-apps-freertos-5_6_0/boards/evkmimxrt1170/demo_apps/avb_tsn/avb_audio_app/armgcc
下的build_release.sh文件
命令:

./build_release.sh

在这里插入图片描述

图13
结果:
在这里插入图片描述
在这里插入图片描述

图 14
可以看到,已经成功生成了avb_app.bin文件。
文件路径:
/home/nxa07323/avbdoc/genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0/genavb-apps-freertos-5_6_0/boards/evkmimxrt1170/demo_apps/avb_tsn/avb_audio_app/armgcc/release
打开avb_app.bin文件:
在这里插入图片描述

图 15
可以看到生成的bin文件中的RT1170 QSPI 的FCB了。

2.4 代码下载

2.4.1 MSD下载方式

根据:genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0\doc\NXP_GenAVB_TSN_Stack_FreeRTOS_Eval_User_s_Guide-5_6_rev0.pdf文档,建议是使用MSD方式,直接拷贝app_avb.bin到EVK的MSD中,但是实际测试由于拷贝之后没有提示烧录成功的进度,很容易会产生问题,比如拷贝bin文件到MSD磁盘之后(看似拷贝已经完成),复位或者断电,但是实际上还没有完成烧录,这个时候就会有代码没有成功烧录的问题,并不能成功运行AVB。所以,如果使用MSD方式,拷贝进MSD之后,最好等待一段时间,保证代码的成功烧录,比如30s。
在这里插入图片描述

图16
但是,经过多次测试,MSD方式并不能做全片擦除,比如已经做了AVB的一些filesystem配置,但是需要重新下载代码做重新配置,发现就算重新拷贝了app_avb.bin进去,之前的AVB配置依旧存在,所以如果需要全新的系统文件配置,建议先做全片擦除再用该方式烧录,或者直接使用serial download模式的方式烧录。
另外,有些客户可能会更新EVK的opensda,有时候更新之后的opensda可能不带MSD,这种方式也建议使用下面的serial download MCUBootutility的方式烧录。

2.4.2 MCUBootutility下载方式

首先板子进入serial download模式:
SW1:1-OFF,2-OFF,3-OFF,4-ON
两根USB线分别接J11和J20 SDP, 重新上电或者复位.
MCUBootutility下载链接:
https://github.com/JayHeng/NXP-MCUBootUtility/releases/tag/v5.3.0
相关文档:
https://github.com/JayHeng/NXP-MCUBootUtility
将上面生成的avb_app.bin烧录到MIMXRT1170-EVK开发板中:
在这里插入图片描述

图 17
这里需要注意,从图15可以看到bin文件从0开始存放了FCB,但是对于MIMXRT1170芯片,FCB的存放是偏移0X400的,所以avb_app.bin的烧录位置需要从0X30000400开始。按照图17的7步步骤烧录bin文件。
这种方式烧录之后,将EVK的SW1改为:1-OFF,2-OFF,3-ON,4-OFF,也就是internal boot模式。
AVB测试需要两块MIMXRT1170-EVK开发板,两块板子烧录的代码一样,均烧录avb_app.bin。
重新启动之后,经过测试查看会发现之前老的filesystem也被清除,此时可以进行全新的系统文件配置.

2.5 talker listener 配置

两块MIMXRT1170-EVK开发板,一块作为AVB Talker,一块作为AVB Listener。由于烧录的app都是一样的,所以需要通过配置filesystem来决定哪块EVK是Talker,哪块是Listener。
本文使用2块EVK是采用AVB背靠背的方式,连接情况如下:
在这里插入图片描述

图 18
Talker: 收集板载麦克风的数据,通过AVB传递到Listener
Listener:收到Talker的音频数据之后,通过Audio Out J33播放Talker板子麦的音频数据。

2.5.1 Talker filesystem配置

Talker 相关配置命令总结如下:
cd …
ls
mkdir avb_app
write avb_app/mclock_role 0

mkdir avdecc
write avdecc/btb_mode 0

mkdir fgptp
write fgptp/gmCapable 1

mkdir port0
write port0/hw_addr 00:22:33:44:55:66
需要说明的是,talker配置:
avb_app/mclock_role=0, Media Clock Master.
avdecc/btb_mode=0, avdecc back-to-back模式
fgptp/gmCapable=1,gPTP grand master
port0/hw_addr=00:22:33:44:55:66,配置硬件地址。
对于hw_addr,需要注意,第一个字节要为00,之前笔者配置为11,总是不能通信成功。
通过EVK的J11串口配置,上电之后可以看到终端打印很多的数据,首先需要进入shell,按键ISERT,这个时候终端会出现>>,关于具体的shell 命令,可以查看文档:
NXP_GenAVB_TSN_Stack_FreeRTOS_Eval_User_s_Guide-5_6_rev0.pdf,
Chapter 6.1.1 Filesystem commands
主要命令有:
write: write a file with a given string
cat: print the content of a file
ls: list all files and directories in the current directory
rm: remove a file or a directory (if it is empty)
cd: change directory
pwd: print working directory
mkdir: create a directory
下图是进入shell,进行文件系统配置的情况
在这里插入图片描述

图 19
根据上述提到的Talker命令,配置talker文件系统:
在这里插入图片描述

图 20
到目前位置,talker的filesystem已经配置成功。

2.5.2 Listener filesystem配置

Listener的相关命令总结如下:
cd …
ls
mkdir avb_app
write avb_app/mclock_role 1

mkdir avdecc
write avdecc/btb_mode 1
write avdecc/talker_id 0x00049f4455660000

需要说明的是,listener配置:
avb_app/mclock_role =1, Media Clock Slave.
avdecc/btb_mode=1, avdecc fast-connect back-to-back mode
avdecc/talker_id =0x00049f4455660000,为fast connect模式配置talker entity id。
Entity id的配置规则如下:
eui[0] = 0x00;
eui[1] = 0x04;
eui[2] = 0x9f;
eui[3] = mac_addr[3];
eui[4] = mac_addr[4];
eui[5] = mac_addr[5];
eui[6] = 0x00;
eui[7] = 0x00;
mac_addr 由hw_addr决定,比如talker配置的hw_addr为:00:22:33:44:55:66,也就是mac_addr[0-5]
则talker_id:
eui[0] = 0x00;
eui[1] = 0x04;
eui[2] = 0x9f;
eui[3] = mac_addr[3]=44;
eui[4] = mac_addr[4]=55;
eui[5] = mac_addr[5]=66;
eui[6] = 0x00;
eui[7] = 0x00;
则talker_id =0x00049f4455660000。
下面进行Listener文件系统配置:
按电脑的insert按键进入shell模式,然后进行shell命令配置。
在这里插入图片描述

图 21
到目前为止,已经配置好Listener的文件系统。

2.6 测试结果

下面开始连接测试,找一根网线连接两块MIMXRT1170-EVK板子,也就是Talker和listener的1G网口J4。Listener的J33插入耳机用于收听talker板子发过来的麦音频数据。
连接实物图片如下:
在这里插入图片描述

图 22
实际效果,当两块板子上电之后,经过短时间的同步,可以在Listener的耳机听到从Talker板麦采集到的音频声音,说明RT1170 AVB通信已经工作。
下面给出部分log图,talker和listener完整的log可以查看附件。
在这里插入图片描述

图 23
在这里插入图片描述

图24
在这里插入图片描述

图 25
在这里插入图片描述

图 26

三, 总结

经过多次测试,可以实现RT1170 AVB的音频传输功能。如果只是单纯测试,不想自己编译生成bin文件,也可以直接使用AVB/TSN协议包里面生成好的bin,路径:
\genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_0\binaries\genavb-avb_audio_app-evaluation-freertos_rt1176-5_6_0.tar\genavb-avb_audio_app-evaluation-freertos_rt1176-5_6_0\release\ avb_app.bin
本次文章仅仅是初体验,更深入的有待后续学习分享。
本次体验过程中也遇到一些问题:
1.linux编译时cmake版本的安装,具体查看章节2.2.2 相关软件工具
2.打印格式混乱,在teraterm中打印,默认115200配置总是出混乱log,难以查看具体内容。就像下面:
在这里插入图片描述

图 27
解决方案:
在这里插入图片描述

图 28
在这里插入图片描述

图29
经过如上配置,既可以查看到工整的log。
3.烧录,刚开始MSD烧录没有给30s等待时间,总是导致MSD烧录失败,还有生成的avb_app.bin没有关注到FCB偏移0X400情况,也就是在mcubootutility中烧录需要偏移到0X30000400。具体查看章节2.4 代码下载
4. Talker文件系统配置port0/hw_addr,第一个字节非0导致AVB通信问题,之后修改第一个字节为0则成功解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值