DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1828|回复: 0
打印 上一主题 下一主题

[待整理] Silicon Labs无线收发器SI446x的应用技巧

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-28 10:22:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
Silicon Labs的无线Sub-G产品Si446x现在已经越来越多的用于表计产品,如气表、电表等。由于在表计类老产品中TI的CC1101系列应用非常广泛,所以客户使用Si446x时,就会遇到和CC1101兼容问题,本文档将解决此问题。
           
          Si446x 具有硬件CRC、Whitening和软件CRC、Whitening,因为不使用CRC、Whitening和Manchester 时,Si446x和CC1101通信配置比较简单,可以参照Si446x works with CC1101_v1.11.pdf文档,本文档只讨论CRC、Whitening和Manchester同时使能时配置方法。
           
          Si446x 提供软件CRC、Whitening算法支持和CC1101兼容,需要将寄存器PKT_WHT_BIT_NUM 0x1205的SW_WHT_CTRL和SW_CRC_CTRL位置1,使能SW whitening和SW CRC。为了确保Si446x开启SW whitening特性可以和CC1101通信,寄存器PKT_WHT_SEED_15_8 0x1203和PKT_WHT_SEED_7_0 0x1204需要都设置为0xFF。
           
          Si446x最为发送端时,包格式需配置如下:
          由于已经开启SW CRC和SW Whitening,所以必须关闭硬件CRC和Whitening,以免重复计算CRC和Whitening,寄存器 PKT_FIELD_1_CONFIG的PN_START和WHITEN位都清零,寄存器PKT_FIELD_1_CRC_CONFIG也配置为 0x00。关闭了硬件CRC,为了发送由软件CRC计算出的2个字节CRC的值,发送数据时需要多发送两个字节给TX FIFO作为CRC字节,并且配置Field1的长度时,也需要额外增加2个字节。比如发送数据为7个字 节,PKT_FIELD_1_LENGTH_12_8和PKT_FIELD_1_LENGTH_7_0则配置成0x00,0x09。下图是数据长度为7的 示意图,其中最后两个字节可以是任意值。
           
          Si446x最为接收端时,包格式需配置如下:
           
       

         

          由 于已经开启SW CRC和SW Whitening,所以必须关闭硬件CRC和Whitening,以免重复计算CRC和Whitening,寄存器 PKT_FIELD_1_CONFIG的PN_START和WHITEN位都清零,寄存器PKT_FIELD_1_CRC_CONFIG也配置为 0x00。关闭了硬件CRC,为了发送由软件CRC计算出的2个字节CRC的值,发送数据时需要多发送两个字节给TX FIFO作为CRC字节,并且配置Field1的长度时,也需要额外增加2个字节。比如发送数据为7个字 节,PKT_FIELD_1_LENGTH_12_8和PKT_FIELD_1_LENGTH_7_0则配置成0x00,0x09。下图是数据长度为7的 示意图,其中最后两个字节可以是任意值。
           
       

         

          Si446x最为接收端时,包格式需配置如下:
       

         

          同 样由于使能了SW CRC和SW Whitening,需要将寄存器PKT_FIELD_1_CONFIG的PN_START和WHITEN位都清零,寄存器 PKT_FIELD_1_CRC_CONFIG也配置为0x00,关闭硬件CRC和Whitening。如果配置了寄存器PKT_CONFIG1 0x1206的PH_FIELD_SPLIT位,则TX和RX的寄存器分开配置,需要将寄存器PKT_RX_FIELD_X_CONFIG (X = 1, 2)的PN_START 和WHITEN位清零,寄存器PKT_RX_FIELD_X_CRC_CONFIG (X = 1, 2)设置为0x00。由于禁止了硬件CRC,接收数据时就不会自动接收CRC字节,并且接收的Field2的长度只包含了Address和Data。为了 能够从空中接收CRC字节,则需要告诉IC多接收2个字节,这2个字节就是CRC字节,所以需要调整接收端的包的长度,分以下两种情况配置。
         
          1、接收端配置为固定包长模式(寄存器PKT_LENENDIAN位是0
          a、 如果PH_FIELD_SPLIT位是0,则Feild1长度配置成1,寄存器PKT_FIELD_1_LENGTH_12_8和 PKT_FIELD_1_LENGTH_7_0配置成0x00,0x01.Feild2的长度需要加2个字节,比如上面发送7个字节,则寄存器 PKT_RX_FIELD_2_LENGTH_12_8和PKT_RX_FIELD_2_LENGTH_7_0配置成0x00,0x09。
          b、PH_FIELD_SPLIT位是1,则上面的寄存器就是对应的PKT_RX_FIELD_1_LENGTH和PKT_RX_FIELD_2_LENGTH。
           
          2、接收端配置为可变包长模式
          则 PKT_LEN需配置为0x21,PKT_LEN_FIELD_SOURCE配置为0x02,表示开启可变包长模式,Feild1是不可变的区 域,Feild2是可变包长区域。这种情况,可以配置PKT_LEN_ADJUST为0x02,接收端在接收数据时会自动增加2个字节。 PKT_LEN_ADJUST只针对可变包长。如下图为对应发射的配置图。
           
       

         

          在 上述基础上增加Manchester,发送端需将PKT_FIELD_1_CONFIG的MANCH位置1;接收端需同时将 PKT_FIELD_1_CONFIG和PKT_FIELD_2_CONFIG的MANCH位置1,或者是同时将 PKT_RX_FIELD_1_CONFIG和PKT_RX_FIELD_2_CONFIG的MANCH位置1。
           
          注意:
          1、由于WDS中没有留出勾选项来配置SW CRC和SW Whitening,所以需要在WDS配置基础上生成工程,在工程中去修改相关寄存器。
           
          2、 在可变包长模式中,如果使用PACKET_INFO来读取接收到的包长,得到的是实际的包长,并且设备接收数据成功后的下一个状态不可以设置为RX状态, 读到的数据长度是最后一次收到数据的长度。如果接收数据成功后就进入下一个状态,那么使用PACKET_INFO命令得到数据会是0。这与读取RSSI值 是类似的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-16 05:28 , 耗时 0.087941 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表