微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > MSP430FR5739+cc3000发送接收UDP广播数据报冲突

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

时间:10-02 整理:3721RD 点击:

 我用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;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top