QoS 是 Quality of Service 的縮寫,在網路應用上,是表示可以透過機制,用以控制機器在傳輸網路訊息的流量,藉此確保網路訊息的傳輸品質。由於這樣的技術已行之有年,一般的使用者很難特別感受到 QoS 所帶來的好處,因此現今的涉及網路通訊的裝置,也將此技術列為必要功能配置。目前 QoS 被廣泛應用在:電競、視訊、遠端會議、遠距醫療等,需要非常注重網路品質的應用場景。
大聯大世平集團,所代理的 NXP 產品線,其中的 MCU --- i.MX RT1170 是一款通用型 MCU,在 Ethernet 的技術上有支援 QoS,舉凡家電、醫療、工業等應用場景都很合適。
以下就開始說明,如何運行 i.MX RT1170 在 Ethernet 的 QoS 範例!
本次範例的環境需求如下表:
1. 首先說明 i.MX RT1170 EVK 的硬體接法,由於 i.MX RT1170 EVK 有提供一個 1G 及一個 10/100MB 的 Ethernet Port,由於我們這次執行的範例程式,在初始化時會自動偵測哪一個 Ethernet Port 被使用,因此不必擔心接錯位置。
2. 然後是設定電腦端 Ethernet 的網路配置,進行靜態 IP 設置:
3. 隨後開啟 TCP/UDP Tool,並開始監聽 Port 10001:
4. 上述設定完成後,開啟 MCUXpresso,點選「Import SDK Example(s)...」
5. 選擇 i.MX RT1170 EVK 後,點選「下一步」:
6. 選擇 lwip_ipv4_ipv6_cho_enet_qos_freertos_cm7 後,點選「完成」:
7. 我們可以在 drivers/fsl_enet_qos.h 內,找到 QoS 相關的定義,在此我們就先不細看這些定義:
8. 點選「Debug」,程式開始自動編譯、燒錄:

9. 燒錄好後,我們開啟 Tera Term,並選擇正確的 COM Port:

10. 點選「Play」,讓程式繼續執行

11. 此時可以看到 Tera Term 中,程式初始化時會偵測哪一個 Erthernet Port 在使用中:

12. 程式初始化完成後,輸入「help」,可以看到有提供哪些範例指令:

13. 由於我們的電腦是作為 Server,因此 i.MX RT1170 EVK 要當作 Client 對 Server 做連線,因此輸入「echo_tcp_client 192.168.0.100 10001」。
14. i.MX RT1170 與 電腦連線後,處於監聽狀態:

15. 我們在電腦上的 TCP/UDP Tool 內,輸入任意文字後送出,可以看到 i.MX RT1170 EVK 有回傳相同 Byte 長度 的內容給電腦,並且在 TCP/UDP Tool 上顯示的就是方才輸入的文字:

至此,整個範例的運行就此告一段落......我是很想這麼說啦,但倘若想要修改 i.MX RT1170 回傳的內容,則可以到 /source/socket_task.c 中參考 wrtie(sck, &buf, bytes) 這個 Function,此 Function 就是進行 Ethernet 的資訊傳送:

至此,整個範例真的要就此告一段落啦!
參考來源