This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6748 UDP mac 地址是否可以修改,如何修改?


现在我使用的是 DSP C6748,创龙 UDP开发例程,
但是例程中的 MAC 地址,注释上说是依据芯片ID生成的;


为什么我改掉后,UDP就无法正常通信了?
请问MAC 地址是否可以修改,如何修改?

具体代码示例如下:
重点是该函数
void EMAC_getConfig(unsigned char *pMacAddr)

现在我使用的是 DSP C6748,UDP开发例程,但是例程中的 MAC 地址,注释上说是依据芯片ID生成的;


为什么我改掉后,UDP就无法正常通信了?
请问MAC 地址是否可以修改,如何修改?



/****************************************************************************/ /* */ /* NDK UDP 通信 */ /* */ /* 2014年09月22日 */ /* */ /****************************************************************************/ /* * 修改历史 * * 2015年06月25日 MAC 地址改为根据芯片 ID 生成 * IP 地址从串口输出 * */ // 组件 #include <ti/sysbios/BIOS.h> #include <ti/sysbios/family/c64p/Cache.h> // XDC #include <xdc/std.h> // 库 #include "TL6748.h" #include "uartStdio.h" // NDK #include <netmain.h> // C 语言函数库 #include <stdio.h> /****************************************************************************/ /* */ /* 全局变量 */ /* */ /****************************************************************************/ // MAC 地址 unsigned char bMacAddr[8]; // 连接状态 char *LinkStr[] = {"No Link", "10Mb/s Half Duplex", "10Mb/s Full Duplex", "100Mb/s Half Duplex", "100Mb/s Full Duplex"}; /****************************************************************************/ /* */ /* 回调函数 EMAC 初始化 */ /* */ /****************************************************************************/ // 这个函数被驱动调用 不要修改函数名 void EMAC_initialize() { // 管脚复用配置 // 使能 MII 模式 EMACPinMuxSetup(); } /****************************************************************************/ /* */ /* 回调函数 获取 MAC 地址 */ /* */ /****************************************************************************/ // 这个函数被驱动调用 不要修改函数名 void EMAC_getConfig(unsigned char *pMacAddr) { // 根据芯片 ID 生成 MAC 地址 bMacAddr[0] = 0x00; bMacAddr[1] = (*(volatile unsigned int *)(0x01C14008) & 0x0000FF00) >> 8; bMacAddr[2] = (*(volatile unsigned int *)(0x01C14008) & 0x000000FF) >> 0; bMacAddr[3] = (*(volatile unsigned int *)(0x01C1400C) & 0x0000FF00) >> 8; bMacAddr[4] = (*(volatile unsigned int *)(0x01C1400C) & 0x000000FF) >> 0; bMacAddr[5] = (*(volatile unsigned int *)(0x01C14010) & 0x000000FF) >> 0; UARTprintf("Using MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", bMacAddr[0], bMacAddr[1], bMacAddr[2], bMacAddr[3], bMacAddr[4], bMacAddr[5]); // 传递 MAC 地址 mmCopy(pMacAddr, bMacAddr, 6); } /****************************************************************************/ /* */ /* 回调函数 获取连接状态 */ /* */ /****************************************************************************/ // 这个函数被驱动调用 不要修改函数名 void EMAC_linkStatus(unsigned int phy, unsigned int linkStatus) { UARTprintf("Link Status: %s on PHY %d\n",LinkStr[linkStatus],phy); } /****************************************************************************/ /* */ /* 回调函数 获取 IP 地址 */ /* */ /****************************************************************************/ void NetGetIPAddr(IPN IPAddr, unsigned int IfIdx, unsigned int fAdd) { if(fAdd) { UARTprintf("Network Added: ", IfIdx); } else { UARTprintf("Network Removed: ", IfIdx); } char StrIP[16]; NtIPN2Str(IPAddr, StrIP); UARTprintf("%s\r\n", StrIP); } /****************************************************************************/ /* */ /* 缓存配置 */ /* */ /****************************************************************************/ void CacheInit() { Cache_Size cacheSize; cacheSize.l1pSize = Cache_L1Size_32K; cacheSize.l1dSize = Cache_L1Size_32K; cacheSize.l2Size = Cache_L2Size_256K; Cache_setSize(&cacheSize); } /****************************************************************************/ /* */ /* 主函数 */ /* */ /****************************************************************************/ int main() { // 串口终端初始化 UARTStdioInit(); // 启动信息 UARTPuts("\r\n\r\nTronlong DSP TMS320C6748 NDK Application ......\r\n", -2); // 启动 SYS/BIOS 系统 BIOS_start(); }

  • 请问是怎么改的? 是通过改MACADDRLO,MACADDRHI寄存器吗?

    另外,创龙的例程最好去咨询创龙,他们比较熟悉。
  • 直接修改  pMacAddr 对应的数值
    void EMAC_getConfig(unsigned char *pMacAddr)
    {
        // 根据芯片 ID 生成 MAC 地址
        bMacAddr[0] = 0x00;
        bMacAddr[1] = (*(volatile unsigned int *)(0x01C14008) & 0x0000FF00) >> 8;
        bMacAddr[2] = (*(volatile unsigned int *)(0x01C14008) & 0x000000FF) >> 0;
        bMacAddr[3] = (*(volatile unsigned int *)(0x01C1400C) & 0x0000FF00) >> 8;
        bMacAddr[4] = (*(volatile unsigned int *)(0x01C1400C) & 0x000000FF) >> 0;
        bMacAddr[5] = (*(volatile unsigned int *)(0x01C14010) & 0x000000FF) >> 0;
        UARTprintf("Using MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n",
                bMacAddr[0], bMacAddr[1], bMacAddr[2], bMacAddr[3], bMacAddr[4], bMacAddr[5]);
        // 传递 MAC 地址
        mmCopy(pMacAddr, bMacAddr, 6);
    }
  • 修改之后,使用sendto 接口,发送数据,错误号为 6 , device no config ,但是  mac 地址 我使用 所谓的依据 芯片ID生成的,就没有出现这个问题;

    这个是什么缘由?