11967|11

1282

帖子

10

TA的资源

五彩晶圆(初级)

楼主
 

CC2500之数据包传输基本方式(Packet Transmission Basics)-翻译 [复制链接]

             数据包传输基本方式
                                                                                                           By fxw451    
1. 前言
cc2500支持内部硬件数据包处理机制,这就更容易的利用无线协议程序来传输数据。然而,它有时很难确认对特定的应用程序实现哪些功能,这种设计文档研究数据包的大小是如何会影响到程序的复杂性,如何以及何时使用不同长度的配置。
2. 数据包大小
它可以发生任意长度的数据包,但是当数据包超过64位(FIFO的大小)时,增大了数据传输的复杂性。除了16位的CRC外,数据包包括同步字节在内的所有字节


 


起始位 | 16/32字节同步字 | 8字节数据长度 | 8字节数据地址 | 8×n字节数据 | 16为的CRC校验位
说明:在TX时自动插入,在RX时自动除去;在TX时用户可选择输入部分,在RX时处理但不会删除;为处理用户数据,除了FEC和白化。
数据包发送模式支持三种不同的数据包长度模式:固定,可变和无穷大,在固定长度数据包模式下,PKTLEN寄存器确定数据长度。例如当PKTLEN = 0x05时,10个字节数据写到TX FIFO,只有5个数据被传输,在接收端在检测到有效同步字后会有5个数据被接受。对可变数据模式,在TX下,PKTLEN寄存器没有什么意义,然而在RX下,它将规定最大数据包长度,例如当PKTLEN = 0x05时,在接受到大于5个有效同步字后丢弃数据包。
2.1 数据包大小<=64个字节
只要数据包不超过64个字节,接受和发送数据就很容易,传送一个数据只要把数据送给TX FIFO,然后出发TX,等待数据传输就可以了。在接收端,在读取FIFO数据之前,他在等待接受整个数据包。固定和可变就是这样工作的。

 

//---------------------------------
// TX (IOCFG0 = 0x06)
halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, sizeof(txBuffer));
halSpiStrobe(CCxxx0_STX);
// Wait for GDO0 to be set -> sync transmitted
while (!P0_6);
// Wait for GDO0 to be cleared -> end of packet
while (P0_6);
//---------------------------------------------
// RX (IOCFG0 = 0x06)
halSpiStrobe(CCxxx0_SRX);
// Wait for GDO0 to be set -> sync received
while (!P0_6);
// Wait for GDO0 to be cleared -> end of packet
while (P0_6);
length = halSpiReadByte(CCxxx0_RXFIFO);
halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, length);

 

要知道即使数据包的大小是64个字节,数据字段的大小将取决于寄存器设置(比如地址滤波,附加状态)

 


2.2 数据包大小<=255时
这也是完全可能来发送和接受多达255个字节的数据包,但是程序变得有点复杂,在TX中需要重新填充TX FIFO,同样在RX中需要重新读取RX FIFO。有两种不同的方式来实现这种功能:一种是在SPI下让MCU配置状态寄存器,另一种是中断驱动解决办法。对于固定和可变均使用。
2.2.1 SPI 配置
在触发TX 或RX,从MISO,TXBYTES ,RXBYTES寄存器获得的状态字节以给定比率(at a given rate)来获得。在TX FIFO有更多的空间来传输更多的字节和在RX FIFO读取更多的数据。
TX:
1.写入64个字节到TX FIFO;
2. 触发 TX;
3.通过检测状态字节或TXBYTES寄存器以给定速率来给TX FIFO可用的空间;
4.当有更多的空间传输数据时,传输给TX FIFO;
5.重复3,4,直到整个数据传完。
RX:
1. 触发RX;
2. 通过检测状态字节或RXBYTES寄存器以给定速率来给RX FIFO可读取的空间;
3.有需要读取是读取到RX FIFO;
4.重复2,3直到数据接收完全。

2.2.2 Interrupt Driven Solution 中断驱动解决方法
在这种情况下,GDO0 和 GDO2对MCU产生中断,在RX时当RX FIFO 接受数据超过 RXFIFO_THR和在TX时当TX FIFO 接受数据超过 TXFIFO_THR时,其中一个引脚产生中断。当在RX同步字已经收到和整个数据包已经传输完成时和在TX数据包已经传输完成时,另一个引脚产生中断。Link2例子实现一个中断驱动的解决方案,可以在TI 网站 ([1])上找到。
2.3数据包大小>255
当你一直想发送和接受数据(适用于所有的数据包长度或少于255个)时,采用无限长度数据包模式可以实现你的目的。在这种情况下,在芯片不知道数据包长度的情况下它不可能在TX自动生成的CRC或在RX处理CRC。然而在发送和接受数据超过255个字节情况下,无限长度数据包模式显得比固定模式更有优势,并能自动CRC插入和处理。
假定传输452个字节数据
设定PKTCTRL0.LENGTH_CONFIG = 2 (10)(无限长度数据包模式)
Pre-program the PKTLEN register to mod(452,256) = 196. 设定PKTLEN寄存器:(452,256) = 196
传输不少于197个字节(少于256个字节剩余传输)
Set PKTCTRL0.LENGTH_CONFIG = 0 (00) (Fixed packet length).
当计数器达到196数据包传输完毕,共452个字节传输。
*这部分看程序看不明白,看图可以看明白。
 


先传输196个字节,让后在传输256个字节,共452字节。

无限长度数据包模式采用SPI 模式(SPI polling不清楚怎么翻译更好)或中断驱动解决方式来实现,所有涉及到的例子都在CC1100/CC1150DK & CC2500/CC2550DK Development Kit Examples and Libraries User Manual ([2])中,如果使用地址滤波PKTCTRL1.ADR_CHK = 1, 2, 或 3,接收到的地址与接收地址相匹配。0xFF 写入到 RX FIFO,通过地址字节,然后是负载数据。
3  勘误表
当使用SPI模式,注意在SPI时钟域和内部26 MHz时钟域之间存在一个影响同步机制的bug,在寄存器值在更新数据时读取了不正确的数据。但也必须注意对于两种方式(SPI polling and interrupt driven)必须确保整个数据包已收到之前,RX FIFO是从不为空(在RX FIFO剩下1个字节),请查阅[3], [4], [5], [6], [7], and [8]。
4 参考文献
[1] CC1100 CC2500 Examples Libraries (swrc021.zip)
[2] CC1100/CC1150DK & CC2500/CC2550DK Development Kit Examples & Libraries
User Manual (swru109.pdf)
[3] CC1100 Errata Notes (swrz012.pdf)
[4] CC1100E Errata Notes (swrz029.pdf)
[5] CC1101 Errata Note (swrz020.pdf)
[6] CC1150 Errata Notes (swrz018.pdf)
[7] CC2500 Errata Notes (swrz002.pdf)
[8] CC2550 Errata Notes (swrz011.pdf)


第一次自己翻译,难免有错误之处,忘大家指教!!有翻译错误的地方尽管提出。谢谢大家提出宝贵的意见


                                                                                                2011-3-20 晚20:17完成初稿
 

[ 本帖最后由 fxw451 于 2011-3-20 22:43 编辑 ]

最新回复

我的乱码和你的乱码应该不是一个问题,我的乱码是论坛里编写代码出现的乱码,你说的乱码是程序的乱码吧,建议你搜搜有关这方面的帖子,里面有很详细的说明。  详情 回复 发表于 2012-8-31 09:06
 
点赞 关注

回复
举报

1282

帖子

10

TA的资源

五彩晶圆(初级)

沙发
 
忘了传附件!!不好意思。

swra109c.pdf

174.03 KB, 下载次数: 133

Packet Transmission Basics翻译.pdf

131.74 KB, 下载次数: 220

 
 

回复

1282

帖子

10

TA的资源

五彩晶圆(初级)

板凳
 
怎么才能插入代码啊,弄了半天也没搞明白,出来是乱码。看样是落后了,请教大家了!

点评

楼主到底是怎么解决的?说下呀,我现在也乱码了,不知道该怎么办了:congratulate:  详情 回复 发表于 2012-8-30 17:41
 
 
 

回复

2万

帖子

74

TA的资源

管理员

4
 

回复 板凳 fxw451 的帖子

插入代码功能可能有些问题,我们尽快联系技术解决。
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

1万

帖子

16

TA的资源

版主

5
 

不错的贴子,顶起

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

996

帖子

0

TA的资源

一粒金砂(高级)

6
 
我看了好久CC2500,但寄存器太多,不好搞懂!~
 
 
 

回复

1282

帖子

10

TA的资源

五彩晶圆(初级)

7
 

回复 6楼 larrybirdkobe 的帖子

是的,非常麻烦!我现在不想看了,直接是用哪块看哪款。短时间内时看不完的!!
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

8
 
顶起~~~~~
 
 
 

回复

1729

帖子

0

TA的资源

五彩晶圆(初级)

9
 
感谢楼主分享啊!
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(中级)

10
 
楼主V5,很不错哦哦
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 板凳 fxw451 的帖子

楼主到底是怎么解决的?说下呀,我现在也乱码了,不知道该怎么办了

点评

我的乱码和你的乱码应该不是一个问题,我的乱码是论坛里编写代码出现的乱码,你说的乱码是程序的乱码吧,建议你搜搜有关这方面的帖子,里面有很详细的说明。  详情 回复 发表于 2012-8-31 09:06
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(中级)

12
 

回复 11楼 yy19871022 的帖子

我的乱码和你的乱码应该不是一个问题,我的乱码是论坛里编写代码出现的乱码,你说的乱码是程序的乱码吧,建议你搜搜有关这方面的帖子,里面有很详细的说明。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表