【RT摩拳擦掌】如何構建RT AVB switch&endpoint平臺
- 一,文檔簡介
- 二,平臺構建
- 2.1 軟硬件情況
- 2.2 配置RT1170 AVB端點
- 2.2.1 1塊MIMXRT1170開發板做talker配置
- 2.2.2 2塊MIMXRT1170開發板做listener配置
- 2.3 AVB Switch 配置
- 2.3.1 MOTU AVB Switch
- 2.3.2 RT1180 AVB switch
- 三,AVB網絡數據包分析
一,文檔簡介
之前講過一篇文章是如何使用單點的RT1170作為talker,單點的RT1170作為listener,兩塊板子直連實現AVB的端點測試。但是實際使用中,很多是多點對多點的應用,不過需要使用到AVB switch。所以本篇文章在之前文章的基礎上,多加了一個listener端點和AVB switch,去實現一個talker,兩個listener的AVB 平臺情況。
AVB switch可以是第三方的成品AVB switch,當然也可以考慮使用NXP的RT即將推出的新產品RT1180,這款芯片是帶有AVB/TSN switch功能的,并且我們的RT1180 配套的stack也已經發布。
二,平臺構建
本文將會使用兩種AVB switch去做AVB測試:一種使用NXP官方的MIMXRT1180-EVK作為AVB switch,另外一種使用第三方產品MOTU的AVB switch。端點使用的是3塊NXP MIMXRT1170-EVK板子,一塊做talker配置,另外兩塊做listener配置。
對于RT1170作為端點,也就是talker和listener的配置,可以參考之前的文章:
【經驗分享】RT1170 AVB初體驗
這里可以直接快速啟動,拿stack里面做好的avb_app.bin直接燒錄到MIMXRT1170-EVK做talker和listener配置,當然,如果有自定義的一些功能修改了源碼,也可以參考上面的文章重新做編譯,生成avb_app.bin文件再燒錄。
2.1 軟硬件情況
硬件:
MOTU AVB SWITCH(switch)
MIMXRT1180-EVK1(switch)
MIMXRT1170-EVK3(1: talker, 2: listener),硬件需要改動,參考初體驗文章。
軟件:
RT1170 AVB/TSN stack:
genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_1: https://mcuxpresso.nxp.com/download/52643189c4d74a7b26b8e096ab28df0e
RT1180 AVB/TSN stack:
genavb_tsn-mcuxpresso-SDK_2_15_0-6_0_0 :
https://mcuxpresso.nxp.com/download/c584c33a8d4f55c29b5505b9be8f537a
2.2 配置RT1170 AVB端點
直接燒錄avbstack里面的文件:
genavb_tsn-mcuxpresso-SDK_2_13_0-5_6_1\binaries\genavb-avb_audio_app-evaluation-freertos_rt1176-5_6_1.tar\genavb-avb_audio_app-evaluation-freertos_rt1176-5_6_1\release\avb_app.bin
到3塊MIMXRT1170-EVK開發板中,可以進入serial download模式燒錄:
三塊板子做同樣的代碼燒錄,燒錄之后,進入internal boot模式,通過串口進行talker和listener的配置,代碼燒錄成功后,板載的串口會一直發log信息,只需要鍵盤輸入INSERT就可以進入到shell命令行狀態。
2.2.1 1塊MIMXRT1170開發板做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
2.2.2 2塊MIMXRT1170開發板做listener配置
cd ..
ls
mkdir avb_app
write avb_app/mclock_role 1
mkdir avdecc
write avdecc/btb_mode 1
write avdecc/talker_id 0x00049f4455660000
2.3 AVB Switch 配置
下面分別給出兩種SWITCH的配置連接情況:
2.3.1 MOTU AVB Switch
使用MOTU AVB switch的連接框圖如下:
實物連接情況如下:
對于專用的AVB switch,無需具體配置,因為你可以把它理解為一個帶有AVB功能的交換機,可以實現AVB數據的轉發功能。只需要把1個talker的1G網口,和2個listener的1G網口分別接入到MOTU AVB SWITCH的網口中皆可。然后只要talker,和listener的功能能夠正常,整個音頻傳輸就可以正常,talker負責收集麥克風的音頻數據信息,然后轉發到兩個listener實現播放。當然,兩個listener需要分別接音箱。
2.3.2 RT1180 AVB switch
對于RT1180 AVB switch的配置,也分為快速上手和自行編譯兩種方法。如果源碼沒有任何改動的情況下,可以直接使用stack自帶的bin文件,這里需要注意,選擇正確的bin文件。RT1180有兩個內核:CM33和CM7內核。CM33的image是支持TSN/AVB bridge功能的,也就是switch,CM7 image是支持TSN endpoint功能的。
MIMXRT1180-EVK帶有多個網口,具體情況如下:
所以在使用AVB switch網口的時候,需要注意使用ENET0,1,2,3口。
使用MIMXRT1180-EVK做AVB switch網口的連接示意圖如下:
實際連接圖下:
要想實現RT1180的代碼工作,需要下載RT1180 M33的TSN bridge代碼到MIMXRT1180-EVK板子中,如果本身的AVB/TSN stack帶的源碼不需要改動,可以使用現成的bin文件測試:
genavb_tsn-mcuxpresso-SDK_2_15_0-6_0_0\binaries\genavb-tsn_app-evaluation-freertos_rt1189_cm33-6_0_0\release\tsn_app.bin
燒錄方法有很多,可以使用工具,或者命令行方式。工具可以是MCUBootutility或者官方的SEC工具,這里選擇使用MCUBootutility工具,下載連接:
https://github.com/JayHeng/NXP-MCUBootUtility/releases/tag/v6.2.0
如果使用SEC工具下載,可以參考stack的文檔:
genavb_tsn-mcuxpresso-SDK_2_15_0-6_0_0\doc\ NXP_GenAVB_TSN_MCUXpresso_User_s_Guide_6_0_rev0.pdf, chapter 11 Flash Image booting.
使用MCUBootutility工具需要做一個改動:
\NXP-MCUBootUtility-6.2.0\src\targets\MIMXRT1189 \MIMXRT1189\bltargetconfig.py
修改:
#flexspiNorMemBase0 = 0x38000000 # CM33 Secure
#flexspiNorMemBase0Ns = 0x28000000 # CM33 Non-Secure
為:
flexspiNorMemBase0 = 0x28000000 # CM33 Non-Secure
flexspiNorMemBase0Ns = 0x38000000 # CM33 Secure
把tsn_app.bin燒錄到0x2800b000。
MIMXRT1180-EVK進入serial download mode,SW5:1-OFF,2-OFF,3-OFF,4-ON.然后找一根USB線連接J33實現燒錄。燒錄完成后,需要進入internal boot 模式QSPI啟動,即:SW5:1-OFF,2-ON,3-OFF,4-OFF.
這樣就完成了帶有AVB switch功能的app燒錄,這個代碼不需要像RT1170那樣,還需要進入shell配置filesystem,對于RT1180 bridge代碼,燒錄之后,重新啟動就自帶switch功能了。
當然如果需要重新編譯自己的工程,可以直接參考stack的文檔NXP_GenAVB_TSN_MCUXpresso_User_s_Guide_6_0_rev0.pdf, 如果使用linux系統編譯,方法和RT1170一樣,三步走:
(1) 給RT1180 SDK打位于AVB stack的patch
(2) 給RT1180 AVB stack加上兩個軟鏈接,一個是板子SDK的,還有一個是AVB SDK源碼鏈接,構架是這樣的:
(3) 最后,直接編譯./ build_release.sh
\genavb_tsn-mcuxpresso-SDK_2_15_0-6_0_0\genavb-apps-freertos-6_0_0.tar\genavb-apps-freertos-6_0_0\boards\evkmimxrt1180\demo_apps\avb_tsn\tsn_app\cm33\armgcc\ build_release.sh
這樣就可以生成對應的tsn_app.bin文件。
三,AVB網絡數據包分析
一直都想查看AVB網絡數據包,于是想了如下的辦法去做,又找了一個通用的網絡交換機,可以把其中的某些網口打包到具體網口的方法,這里使用這種方法也只是想查看下基本包,從原理上講,通用交換器是不帶有AVB物理層功能的,所以應該是會對同步功能有所影響,不過本文在此,由于設備的限制,也只是基本了解下AVB數據包結構情況。
準備帶有端口mirror功能的交換器:NETGERA plus switch ProSAFE GS105E。
然后對交換器做一個配置,把端口2,3的數據mirror到端口1:
然后整個AVB系統連接框圖如下:
實物連接圖這樣的:
打開整個系統平臺,讓系統功能跑起來,也就是talker端點聲音輸入,2個listener端點的功放有輸出的情況,在PC端打開wireshark軟件,抓包,抓出來的情況是這樣的:
可以看到,有很多的AVTP數據包,而且目標地址也有兩個。
要想分析AVTP數據包,首先得知道標準的AVTP數據包情況是怎么樣的,標準數據包是這樣的結構:
下面打開wireshark軟件,配置好要抓的網口,抓到數據包情況來對比一下:
可以看到,整個包的情況,基本還是抓出來了,但是對于細節部分,比如VLAN tag,IEC 61883 header,這些沒有體現出來,應該是和普通交換機物理層無法支持AVB的原因有關,但是可以看到,上面的音頻數據還是能看到的,而且確實是雙通道,但是數據只傳了一個通道,所以對于RT1170 listener這邊,雖然接了雙通道的揚聲器,兩個喇叭對應左右聲道,但是聽下來,只有一個喇叭通道有聲音,另一個沒有聲音,這點和抓到的數據包是吻合的,這點的源頭是stack代碼麥采集就用了一個通道,然后雖然音頻配置了2個通道,但是實際只有一個通道有數據。
到目前為止,實現了AVB switch&endpoint平臺的構架與測試。
測試效果查看視頻情況。