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.

MSP430FR5739+cc3000发送接收UDP广播数据报冲突

Other Parts Discussed in Thread: MSP430FR5739, MSP-EXP430FR5739

 我用MSP430FR5739+cc3000,在ti官网上下载了cc3000 FRAM Sensor Application程序包修改程序,用的是DHCP,可以正常连上路由器,我创建了用于udp的socket,用sendto()广播数据正常,用select()监听socket和recvfrom()接收数据也正常;就是同时广播和接收的时候,程序卡死了,这是收发冲突了么?这是怎么回事?能帮我解答一下么?

  • 几天都没人回复,不过已经解决的问题,只要把固件版本升级到最新就可以,但是255.255.255.255的广播形式还是不可以用,不知道固件还不稳定还是其他原因。固件下载地址:http://processors.wiki.ti.com/index.php/CC3000_Wi-Fi_Downloads。

  • 能否把你的代码贴在这里我们看一下?

  • 我也有同样的问题, UDP广播只能发送1,2次,  就死机; 

    固件更新是用Patch Programmer下载的吗?

    //test group socket;
    wlSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    wrSocketAddr.sa_family = AF_INET;
    wsSocketAddr.sa_family = AF_INET;
    // the source port 7999=0x1F3F;
    wrSocketAddr.sa_data[0] = 0x1F; //ascii_to_char(usBuffer[2], usBuffer[3]);
    wrSocketAddr.sa_data[1] = 0x3F; //ascii_to_char(usBuffer[4], usBuffer[5]);
    wsSocketAddr.sa_data[0] = 0x1F; //ascii_to_char(usBuffer[2], usBuffer[3]);
    wsSocketAddr.sa_data[1] = 0x3F; //ascii_to_char(usBuffer[4], usBuffer[5]);
    wsSocketAddr.sa_data[2] = 255;
    wsSocketAddr.sa_data[3] = 255;
    wsSocketAddr.sa_data[4] = 255;
    wsSocketAddr.sa_data[5] = 255;
    // all 0 IP address
    memset (&wrSocketAddr.sa_data[2], 0, 4);
    bind(wlSocket, &wrSocketAddr, sizeof(sockaddr));
    //test second socket;

    while(1){
    sendto(wlSocket, (unsigned char*)wlSocketDataString, sizeof(wlSocketDataString), 0, &wsSocketAddr, sizeof(sockaddr));
    delay_ms(1000);
    }

  • 是的,里面有两个工程工程:Patch Programmer IAR_DR_Patch和Patch Programmer IAR_FW_Patch,先下载第一个,再下载第二个

  • 不要用255.255.255.255,可以用192.168.1.255,具体什么原因我也不清楚

  • Patch Programmer 的最新版是1.11.7.14.24? 还是有更新的?

  • 我现在就是用这个,两个月没看ti网站了,不知道更新没有

  • 谢谢,用了172.16.15.255还是不行, 会不会是AP的问题;

  • 确定是升级了固件吗?可以用代码把固件版本读出来的,就在nvmem.c里,有个函数nvmem_read_sp_version可以读出版本号,如果升级了的版本号是1.24

  • 谢谢, 版本号读出是1.18,   

    PatchProgrammer 用的是PatchProgrammerMSP430FR5739_1_11_7_14_24windows_installer.exe

  • To Shuming Ye: 你用的是cc3000 FRAM Sensor Application,这是比较老的host driver吧。能否patch programmer和host driver都升到最新的?

    To Chen Jin: 请问死机的现象是什么?能否麻烦调试一下,看看是死在哪个函数里面了。还有就是能否确认fw和host driver都用最新的。

  • 请问哪个才是最新的host drive?

  • To Chen Jin: 我刚才又试了一下msp430fr5739和cc3000, udp broadcast 用255.255.255.255是可以一直发的。

    就是用你上面的代码。不过你上面的代码的意思是无论你设成什么IP,之后你都会用memset把它设成0.你说对吗?

    Again, 能否请调试一下,看看sock结构体的值和死在哪个函数里。更好是用wireshark去抓抓包,看看到底有没有发出来。

  • 我之前测试的时候,发是可以一直发,几天都可以不死,但是,一旦发送和接收同时存在,不多久就死了

  • 你的代码可以贴出来我们试试看吗?

  • to Pan :  可能是Host Driver 的问题, 一直没有更新, FW 读出是 1.18, 

                  Host Driver 〉    #define DRIVER_VERSION_NUMBER   12  ;

                是否新的, 新的在哪下载?

  • 刚下载了#define DRIVER_VERSION_NUMBER   14;

    再试下,不行就调试下;

  • TO yonghua pan 

    Firmware 1.18 , Hostdriver 14; 

    还是不行,  偶尔能发出1次UDP广播包, 后死在:  hci_event_handler(void *pRetParams, unsigned char *from, unsigned char *fromlen), 

    程序是基于 BasicWiFi Application 改的, 在MSP-EXP430FR5739+CC3000 EM BOARD--CC3000 Evaluation Module Board 下运行;

    可以把你的测试程序(Workspace) 完整的发给我,  我在CC3000 EM BOARD下测试看看;

    着急,花了太多时间了,  My Email:  kiteu2@sohu.com,  谢谢!!

  • MSP430FR5739+CC3000最新的SDK,没有动任何东西除了修改下面的代码段. 在输入的命令如下

    ××××××××××××××××××××××

    03
    04051234502115cffffffff

    ××××××××××××××××××××××

    // Handle send data command
    case UART_COMMAND_SEND_DATA:

    // data pointer
    pcData = (char *)&usBuffer[4];

    // data length to send
    ulDataLength = atoshort(usBuffer[2], usBuffer[3]);

    #ifdef CC3000_TINY_DRIVER
    if(ulDataLength > CC3000_APP_BUFFER_SIZE)
    {
    ulDataLength = CC3000_APP_BUFFER_SIZE;
    }
    #endif

    pcSockAddrAscii = (pcData + ulDataLength);
    #if 0
    // the family is always AF_INET
    tSocketAddr.sa_family = atoshort(pcSockAddrAscii[0], pcSockAddrAscii[1]);

    // the destination port
    tSocketAddr.sa_data[0] = ascii_to_char(pcSockAddrAscii[2], pcSockAddrAscii[3]);
    tSocketAddr.sa_data[1] = ascii_to_char(pcSockAddrAscii[4], pcSockAddrAscii[5]);

    // the destination IP address
    tSocketAddr.sa_data[2] = 255; //ascii_to_char(pcSockAddrAscii[6], pcSockAddrAscii[7]);
    tSocketAddr.sa_data[3] = 255; //ascii_to_char(pcSockAddrAscii[8], pcSockAddrAscii[9]);
    tSocketAddr.sa_data[4] = 255; //ascii_to_char(pcSockAddrAscii[10], pcSockAddrAscii[11]);
    tSocketAddr.sa_data[5] = 255; //ascii_to_char(pcSockAddrAscii[12], pcSockAddrAscii[13]);

    sendto(ulSocket, pcData, ulDataLength, 0, &tSocketAddr, sizeof(sockaddr));
    #else
    // the source port 7999=0x1F3F;
    tSocketAddr.sa_data[0] = 0x1F; //ascii_to_char(usBuffer[2], usBuffer[3]);
    tSocketAddr.sa_data[1] = 0x3F; //ascii_to_char(usBuffer[4], usBuffer[5]);
    tSocketAddr.sa_data[2] = 255;
    tSocketAddr.sa_data[3] = 255;
    tSocketAddr.sa_data[4] = 255;
    tSocketAddr.sa_data[5] = 255;
    // all 0 IP address
    //memset (&tSocketAddr.sa_data[2], 0, 4);
    bind(ulSocket, &tSocketAddr, sizeof(sockaddr));
    //test second socket;

    while(1){
    sendto(ulSocket, (unsigned char*)pcData, sizeof(pcData), 0, &tSocketAddr, sizeof(sockaddr));
    //delay_ms(1000);
    }
    #endif
    break;