iamrhq55 发表于 2011-9-29 14:24:15

急!!CC1100如何接收100个以上的字节

CC1100如何接收100个以上的字节,是这样的,我的项目要求定点测试一个点的频率,并用CC1100将数据发到服务端,请问CC1100如何接收,发送100个以上的字节,CC1100的FIFO只有64字节,要是分两字接、发的话,要如何去分,小弟不才看不懂英文资料,不过我看过资料上有说过大于64字节的接收的。

原文大概如下,实现看不懂,请朋友们指条明路,接、发、无线唤醒功能都全做好,现在就差如何实现大量数据的接、发而已,希望好心人能教一下,最好有做过大数据接,发的朋友,贴个程序来给小弟看看。谢谢大家

The number of bytes in the RX FIFO can be read from the status register
RXBYTES.NUM_RXBYTES. To avoid receiving data while reading the last byte in the
RX FIFO one should never empty the RX FIFO before the last byte of the packet is
received. Due to issue 3 in this errate note, special care must be taken when reading the
RXBYTES register during reception.:
1. Read RXBYTES.NUM_RXBYTES repeatedly at a rate guaranteed to be at least
twice that of which RF bytes are received until the same value is returned twice; store
value in n.
2. If n < # of bytes remaining in packet, read n-1 bytes from the RX FIFO.
3. Repeat 1-2 until n = # of bytes remaining in packet.
4. Read the remaining bytes from the RX FIFO.
Pseudocode:
BYTE n, l, len, *pDataBuf;
// Get length byte in packet (safely)
n = SPI_READ(RXBYTES);
do { l = n; n = SPI_READ(RX_BYTES); } while (n<2 && n!=l);
*pDataBuf++ = len = SPI_READ(RX_FIFO);
// Copy rest of packet (safely)
while (len>1) {
n = SPI_READ(RXBYTES);
do { l = n; n = SPI_READ(RX_BYTES); } while (n<2 && n!=l);
while (n>1) {
*pDataBuf++ = SPI_READ(RX_FIFO);
len--; n--;
}
}
*pDataBuf++ = SPI_READ(RX_FIFO);

iamrhq55 发表于 2011-9-29 16:11:06

回复【楼主位】iamrhq55
-----------------------------------------------------------------------

大家能给点意见吗./emotion/em119.gif

zhonghua_li 发表于 2011-9-29 16:42:42

建议你不要传递这么大的数据包。
很容易失败。

kevinshq 发表于 2011-9-29 19:57:37

例:FIFOTHR.FIFO_THR = 14,5字节发送FIFO,60字节接收FIFO,如果在接收模式,则设置IOCFG2 = 0x00(当接收FIFO里面的数据超过阀值,则GDO2输出高,在接收模式,使用GDO2上升沿中断),如果在发送模式,则设置IOCFG2 = 0x02(当发送FIFO中的数据超过阀值,则GDO2输出高,在发送模式,使用GDO2下降沿中断),IOCFG0 = 0x06(当同步字发送完成或被接收完成,则GDO0为高,包操作完成为低,在接收模式,一个包由于地址不对或超过最大长度或接收FIFO上溢而被丢弃也将为低,在发送模式,发送FIFO下溢将为低)。发送端,开始写入64字节到发送FIFO,开启发送(STX),等待GDO2下降沿中断被触发,写60字节到发送FIFO,如此循环,将要发送的数据发出;接收端,接收到同步字GDO0为高,等待两个字节被放到接收FIFO,读取包长值,使能GDO0下降沿中断,当接收数据字节数达到60或超过,GDO2上升沿中断,读取接收FIFO中的值(读取59个字节),如此重复在GDO2上升沿中断读取数据,期间要靠接收到的第一个字节表示的数据长度来计算以后的数据不能填满接收FIFO时,遇到GDO0下降沿中断,则读取接收FIFO中全部数据。至此,一个数据包的发送和接收完成。

假如一个包长为150字节,则共需写151个字节到发送FIFO,其中,第一个字节为数据包长度,在这里为150,而接收部分则总共需从接收FIFO中读出152个字节(看具体配置,如果PKTCTRL1.APPEND_STATUS为0,则读出150个字节)

注:例中,需要配置PKTLEN.PACKET_LENGTH寄存器,(这里推荐0xFF),PKTCTRL0.LENGTH_CONFIG配置为1,其他寄存器请自行配置。

iamrhq55 发表于 2011-9-30 10:32:22

回复【2楼】zhonghua_li 蓝色天空
-----------------------------------------------------------------------

项目要求的呀,没办法,有能够指引一下的吗

again 发表于 2011-9-30 10:39:28

数据大小是没关系的,关键看你的传输数率!TI有对应范例的自己去找找吧

recon 发表于 2011-9-30 10:42:09

回复【楼主位】iamrhq55
-----------------------------------------------------------------------

我了解 它有两种工作模式,一个是可变数据包,还有一个是固定数据包长度。一般用可变数据包小于64个字节,第一个字节为数据长度,这样处理起来比较方便。你可以分两个包发送,每次数据包收到后放在内存。接收端收到两次后,做一次处理就Ok了。不建议发送数据包太长,很容易丢包。

orzorzorzorz 发表于 2011-9-30 11:19:49

采用tx fifo和rx fifo阀值中断来传输

STM8L2012 发表于 2011-10-1 18:13:13

回复【4楼】iamrhq55
回复【2楼】zhonghua_li 蓝色天空
-----------------------------------------------------------------------
项目要求的呀,没办法,有能够指引一下的吗
-----------------------------------------------------------------------

我有支持单个数据包384Byte的CC110L无线模块哦,有兴趣加我QQ:1006218736

rfinchina2012 发表于 2011-10-1 19:17:04

点击此处下载 ourdev_680002PX9CPN.rar(文件大小:10.47M) (原文件名:无线数传-配套资料V0.3.2.rar)

iamrhq55 发表于 2011-10-6 09:03:46

有做过大数据发送的吗

rengo 发表于 2011-10-6 14:00:55

3楼说的很明白了.
不建议这么搞,效率低

iamrhq55 发表于 2011-10-6 14:36:13

回复【3楼】kevinshq
-----------------------------------------------------------------------

谢谢kevinshq 的指教,你有类似的程序吗,能贴个我看看最好

iamrhq55 发表于 2011-10-6 14:38:35

回复【11楼】rengo
-----------------------------------------------------------------------

因这项目是这样的要求没有办法,看来楼主也用CC1100做过大数据的发送吧,./emotion/em035.gif

34071417 发表于 2011-11-23 11:31:19

3楼是对的,需要设置一个发送字节长度寄存器,这个TI有范例,专门有一个就是发送大于缓存器长度数据的程序
页: [1]
查看完整版本: 急!!CC1100如何接收100个以上的字节