天天看點

TMS320C6678開發筆記---網絡例程

第17節  網絡例程

ps:兩周前調試的網絡,現在有些記不清了,現試着回想将開發流程寫出來。

17.1節  創龍NDK_TCP例程編譯

  • 例程位置:E:\ft6678\doc\Tronlong6678\Demo\SYSBIOS\Application\NDK_TCP
  • 編譯依賴的庫版本
* CCSv7 IDE

 * 7.4

* 依賴元件版本為

 * - XDCTools 3.50.5.12-core *

 * - Board Library 4.6.0.01 *

 * - NDK 2.25.1.11 *

 * - SYS/BIOS 6.52.0.12 *

 * - UIA 2.20.0.02 *

 * - C667x PDK 2.08
           
  • 編譯配置
TMS320C6678開發筆記---網絡例程
TMS320C6678開發筆記---網絡例程
TMS320C6678開發筆記---網絡例程
TMS320C6678開發筆記---網絡例程
  • 公司闆卡預設使用SPI啟動,PLL沒有配置,程式啟動後需要代碼配置PLL,代碼修改如下:

E:\ft6678\doc\Tronlong6678\Demo\SYSBIOS\Application\NDK_TCP\main.c

TMS320C6678開發筆記---網絡例程

17.3節  與網絡交換晶片5396互通

  • DSP6678與5396互通,需要配置DSP6678 SerDes參數。 修改配置如下:

① 配置SerDes參數

C:\ti\pdk_C6678_1_1_2_6\packages\ti\platform\evmc6678l\platform_lib\src\evmc6678_phy.c

configSerdes函數

//CSL_BootCfgSetSGMIIRxConfig (0, 0x00700621);	// ti預設提供的配置參數
    //CSL_BootCfgSetSGMIIRxConfig (1, 0x00700621);
    CSL_BootCfgSetSGMIIRxConfig (0, 0x00440411);		// 連接配接5396需要配置的參數
    CSL_BootCfgSetSGMIIRxConfig (1, 0x00440411);

//CSL_BootCfgSetSGMIITxConfig (0, 0x000108A1);	// ti預設提供的配置參數
//CSL_BootCfgSetSGMIITxConfig (1, 0x000108A1);	
    CSL_BootCfgSetSGMIITxConfig (0, 0x00010F11);		// 連接配接5396需要配置的參數
    CSL_BootCfgSetSGMIITxConfig (1, 0x00010F11);
           

② 打開主模式

C:\ti\pdk_C6678_1_1_2_6\packages\ti\platform\evmc6678l\platform_lib\src\evmc6678_phy.c

Init_SGMII函數

TMS320C6678開發筆記---網絡例程
  • platform_lib_evmc6678l為庫檔案,目錄在C:\ti\pdk_C6678_1_1_2_6\packages\ti\platform下,加載到CCS中後修改configSerdes函數,編譯成功後的檔案為platform\evmc6678l\platform_lib\lib\debug\ti.platform.evm6678l.ae66
  • 将ti.platform.evm6678l.ae66拷貝到E:\ft6678\doc\Tronlong6678\Demo\SYSBIOS\Library\Debug目錄下,重新編譯NDK_TCP例程即可(注意NDK_TCP工程配置檔案中将Tronlong.DSP.C6678.Platform.le66庫檔案名稱為ti.platform.evm6678l.ae66)
TMS320C6678開發筆記---網絡例程

17.4節  EMAC0支援

  • 預設ti提供的例程使用的是EMAC1,公司闆卡硬體連接配接了EMAC0,此處需要做移植。

參考文章:

http://processors.wiki.ti.com/index.php/NDK,_PA_Resource_Wiki_for_Keystone_Devices#Q_Where_and_how_to_enable_the_EMAC0_on_C6678_EVM.27s_AMC_c

TMS320C6678開發筆記---網絡例程

https://blog.csdn.net/kunkliu/article/details/107105797

https://www.pianshen.com/article/6008408646/

支援EMAC0移植步驟如下:

  • 步驟1.

導入NIMU工程(C:\ti\pdk_C6678_1_1_2_6\packages\ti\transport\ndk\nimu),修改nimu_eth.c檔案。修改方法:

① EmacSend()函數中,移除下面這行代碼:

Cppi_setPSFlags (Cppi_DescType_HOST, (Cppi_Desc *)pCppiDesc, (1<<gTxPort));
           

②EMACInit_Core()函數中,用下面的代碼替換"#ifndef SIMULATOR_SUPPORT" 和 "#else" 之間的代碼:

platform_get_emac_info(0, &emac_info);

memcpy(ptr_pvt_data->pdi.bMacAddr, emac_info.mac_address, 6);
           

③Init_Switch()函數中,把下面的代碼放到Init_Switch()函數的最後:

// Configure "Learning"/"Forward" state for all 3 ports
int portNum;
for (portNum=0; portNum<3; portNum++)
{
    CSL_CPSW_3GF_ALE_PORTCONTROL alePortControlCfg;
    alePortControlCfg.portState             =   ALE_PORTSTATE_FORWARD;
    alePortControlCfg.dropUntaggedEnable    =   0;
    alePortControlCfg.vidIngressCheckEnable =   0;
    alePortControlCfg.noLearnModeEnable     =   0;
    alePortControlCfg.mcastLimit            =   0;
    alePortControlCfg.bcastLimit            =   0;
    CSL_CPSW_3GF_setAlePortControlReg (portNum, &alePortControlCfg);
}
           

④用下面的函數替代整個Init_Cpsw()函數:

int32_t Init_Cpsw (uint32_t mtu, uint8_t* myMACAddress)
{                      
    uint8_t portMac[6] = {0x1, 0x1, 0x1, 0x1, 0x1, 0x1};
    Init_MAC(0, portMac, mtu);

    portMac[0] = 2;
    Init_MAC(1, portMac, mtu);

    /* Setup the Phys by initializing the MDIO - not needed for Simulator*/
    Init_MDIO();

    /* Setup the Ethernet switch finally. */
    Init_Switch(mtu);

    /* CPSW subsystem setup done. Return success */
    return 0;
}
           
  • 步驟2.

導入Platform_lib工程(C:\ti\pdk_C6678_1_1_2_6\packages\ti\platform\evmc6678l\platform_lib),修改platform.c,如果要支援雙網口,把Init_SGMII(0);的注釋去掉;如果要修改使之隻支援port0,去掉Init_SGMII(0)的注釋,并注釋Init_SGMII(1)。

  • 步驟3.

rebuild “Platform_lib工程”

rebuild “NIMU工程”

編譯方法将在下一節介紹

ps:NIMU工程編譯出的庫名稱為nimu_eth_evmc6678l.lib,位置C:\ti\pdk_C6678_1_1_2_6\packages\ti\transport\ndk\nimu\Debug,在NDK_TCP工程配置檔案中需要修改名稱。

  • 移植成功後調試列印資訊如下:
TMS320C6678開發筆記---網絡例程
TMS320C6678開發筆記---網絡例程

17.5節  nimu_eth_evmc6678l 編譯

通過工程編譯

17.5節  platform_lib_evmc6678l 編譯

通過工程編譯

17.6節  創龍NDK_Telnet例程分析

  • 參考例程:E:\ft6678\doc\Tronlong6678\Demo\SYSBIOS\Application\NDK_Telnet-cks
  • 原則上:隻要創龍的NDK_Telnet可以編譯通過(參考NDK_TCP例程),可以與PC機ping通即可。Telnet即可正常使用
  • 代碼中增加telnet支援:(通過對NDK增加Telnet配置資訊,具體代碼怎麼實作的沒有追究,以後有機會在研究)
// 添加一個 Telnet 伺服器
	CI_SERVICE_TELNET telnet;
	bzero( &telnet, sizeof(telnet) );
	telnet.cisargs.IPAddr = INADDR_ANY;
	telnet.cisargs.pCbSrv = &ServiceReport;
	telnet.param.MaxCon = 2;
	telnet.param.Callback = &ConsoleOpen;
	CfgAddEntry( hCfg, CFGTAG_SERVICE, CFGITEM_SERVICE_TELNET,0, sizeof(telnet), (UINT8 *)&telnet, 0 );
           
  • NDK 中的telnet服務中通過ConsoleOpen建立了一個Console task,然後在裡面實作了一些指令

ccs列印資訊:

TMS320C6678開發筆記---網絡例程

序列槽列印資訊:

TMS320C6678開發筆記---網絡例程

17.7節  應用層通過telnet列印調試資訊支援

  • 使用場景:8個核的調試列印資訊通過網口輸出。 尚未實作。

17.8節  tftp支援

  • 預設Telnet例程中包含tftp功能,使用方法如下:
TMS320C6678開發筆記---網絡例程