radiolink-XM9816S
| Part # | radiolink-XM9816S |
| Download | radiolink-XM9816S |
XM9816S
芯片说明书
V1.3
XM9816S
——2.4GHz
高集成度无线收发芯片
应用领域:
功能描述:
工业传感器及无线工控设备
频率范围
2402~2530MHz
,提供
128
无线游戏设备
遥感勘测
个
channel
无线速率:
1Mbps
支持
SPI
或
I2C
接口
自动应答及自动重传
快速频道切换,支持跳频算法
支持
RSSI
功能
安防系统
智能运动设备
智能电视遥控器
无线标签
无线门禁
支持软件复位
安防系统
简单低成本外围元器件
低工作电压:
1.9V~3.6V
遥控装置
无线玩具
SSOP16
封装
XM9816S
中文手册
V1.3
目录
XM9816S
中文手册
V1.3
1.
概述
XM9816S
是一款工作在
2.4GHz
世界通用
ISM
频段的单片集成无线收发芯片
。
该
芯片集
成了射频接收器、射频发射器、频率综合器、
GFSK
调制器、
GFSK
解调器等功能模块。通过
SPI
或
I2C
接口可以对输出功率、频道选择以及协议进行灵活配置,并且内置
CRC
、
FEC
、自
动应答和自动重传机制
,
可
以大大简化系统设计并优化性能
。
外
围电路简单
,
只
需搭配极少
的被动器件就能达到优良的收发性能。
芯片的优点
:
低功耗
当工作在发射模式下(发射功率为
0dBm
)时电流消耗为
14mA
;
当工作在接收模式时电流消耗为
16mA
;
当工作在休眠模式时电流消耗低于
1uA
。
低成本
低成本系统解决方案;
外围元器件低于
5
个;
内部集成上电复位和软件复位功能,外围控制简单;
采用双层
PCB
,可以采用印制板天线方式;
高性能
工作频率
2402MHz~2530MHz
;
最高数据码率
1Mbps
;
最大输出功率
6dBm
,灵敏度可达
-89dBm
正常配置下(发射功率
6dBm
),空旷地带通信距离大于
80
米
XM9816S
中文手册
V1.3
2.
极限值
表
2.1
参数极限值
参数
工作温度
符号
Top
最小值
-40
最大值
100
125
3.7
单位
℃
存储温度
Tstor
-55
℃
工作电压
VDD
-0.3
V
输入射频信号强度
ESD(
人体模型
)
Pin_max
ESD_HBM
+10
2
dBm
KV
*
注意:强行超过一项或多项极限值使用会导致器件永久性损坏。
*
小心:芯片为静电敏感器件,操作时请遵守防护规则。
3.
主要电特性
表
3.1
芯片主要电特性
特
性
条件
(
除另有规定外,
VCC
= 3.3V
,
TA=25
℃
)
休眠模式
参数值
典型
0.8
单位
最小
最大
uA
uA
待机模式
600
14
发射模式
(0dBm)
接收模式
mA
mA
ICC
16
系统指标
f
OP
f
XTAL
工作频率
晶振频率
PLL
稳定时间
码率
2402
2530
MHz
MHz
us
12
150
1
PLL_stable
Mbps
MHz
FCH
1
M
频道间隔
1
发射模式指标
最大输出功率
典型输出功率
输出功率范围
6
0
dBm
dBm
dBm
MHz
PRF
PRF
-18
6
PRFC
PBW
1
载波调制的
20dB
带宽
(
1Mbps
)
1
1.1
XM9816S
中文手册
V1.3
接收模式指标
接收灵敏度(
0.1%BER
)
抗干扰特性
同道干扰
-89
dBm
RXSENS
2
C
/
CO
C
/
1
ST
C
/
2
ND
C
/
3
RD
9
dBc
dBc
dBc
dBc
第
1
相邻道干扰
第
2
相邻道干扰
第
3
相邻道干扰
5
-12
-24
操作条件
1.9
供电电压
芯片地
3
0
3.6
V
V
VDD
VSS
V
OH
高电平输出电压
低电平输出电压
高电平输入电压
低电平输入电压
输入电容
VDD-0.3
VSS
VDD
VSS+0.3
3.6
V
V
OL
V
IH
V
IL
V
2.0
3
V
VSS
VSS+0.3
10
V
Cin
pF
℃
℃
工作温度
-40
-40
27
27
+100
+125
储存温度
Notes: 12MHz
晶振的负载电容为
22pF
4.
系统结构方框图
图
4.1
系统结构方框图
XM9816S
中文手册
V1.3
5.
引脚定义
SPI_MOSI
I2C_SEL
RST_N
SPI_MISO
16
15
14
1
2
3
SPI_CLK
SPI_CS
VDD33
XO
13
12
4
5
PKT_FLAG
NC
SSOP16
11
10
9
6
7
8
XI
RF_VDD
ANT
NC
VSS
ANTB
图
5.1 SSOP16
引脚图
表
5.1 SSOP16
引脚功能说明
序号
Pin Name
SPI_MOSI
Type
DI
Description
1
SPI
数据输入脚
接口模式选择
2
3
I2C_SEL
RST_N
DI
DI
0
:
SPI
1
:
I2C
芯片复位脚,低电平有效
;
复位后寄存器数值丢失,
全部变为默认值。
4
5
VDD33
XO
PWR
AO
3.3V
电源出入
晶体振荡器输出
6
XI
AI
晶体振荡器输入
7
NC
NC
NC
8
VSS
GND
RF I
RF I
PWR
NC
地
射频输入
1
9
ANTB
ANT
10
11
12
13
14
15
16
射频输入
2
RF_VDD
NC
内部
1.8V
电源输出
NC
PKT_FLAG
SPI_CS
SPI_CLK
SPI_MISO
DO
DI
发射接收状态标志位
使能信号
,
低
有效
,
拉
低可使芯片退出
sleep mode
SPI/I2C
时钟输入脚
SPI
数据输出脚
/I2C
数据脚
DI
D I/O
XM9816S
中文手册
V1.3
6.SPI
接口
6.1 SPI
时序格式
Notes:
1. SPI
为下降沿采样数据
,
上
升沿改变数据
;
MCU
在控制
SPI_MOSI
时一定要在
SPI_CLK
上升沿之后再改变数据。
2. SPI
读写位: 写
=0
,读
=1
。
3.
访问接
收
FIF
O
寄存
器
0X2
8
时
,
可
以按字节读
。
访
问多
个
FIF
O
数据时可以用一
个
SPI_CS
周期。
4.
访问除
FIFO
外的其他寄存器时,一次要读写
16bits
。
5.
访问除
FIFO
个的其他多个寄存器时
,
可
以用一个
SPI_CS
周期
。
此
时
,
地
址只要写一次,
然后是
16bit
数据,当写完一个寄存器值后,芯片会自动增加寄存器地址。
6.2 SPI
时序要求
Notes:
1.
在访问寄存器
0x28
中的
FIFO
数据时,芯片需要
450ns
去找到正确的读
FIFO
读取的指
针地址。
2.
当读寄存器
0x28
中的
FIFO
数据时,至少需要等
450ns
。
读其他寄存器时,
T5min=41.5ns
XM9816S
中文手册
V1.3
7. I2C
接口
7.1 I2C
命令格式
Master
写一个或多个字节到
FIFO
或
Register
Master
写一个字节到指定的寄存器,然后从
FIFO
中读出
1
个或多个字节数据
Master
可以连续读出
FIFO
数据
7.2 I2C
特性
I2C
设备从模式可选特性
Standard mode
–
100kbps
Fast mode
–
400 kbps
Fast mode plus
–
1000 kbps
High speed mode
–
3200 kbps
Clock stretching
是否支持
Y
e
s
Y
e
s
Y
e
s
No
No
10-bit slave address
General call address
Software reset
No
No
No
Device id
No
7.3 I2C
器件地址
在
I2C
模式下,芯片器件地址如下:
A6 A5
A4
A3 A2
A1
A0
R/W
0
1
1
0
0
0
Read=1
Write=0
由
SPI_MOSI
决定
XM9816S
中文手册
V1.3
8.
状态机控制图
图
8.1
状态机控制图
9.
部分寄存器描述
RF Synthesizer TX/RX control
Register 0x00
default : 0x0030
Bit
Name
R/W Description
Default
15
14
TX_EN
RX_EN
R/W
R/W
0
0
使能芯片进入发送状态
,
1
有效
使能芯片进入接收状态
,
1
有效
注:
TX_EN
和
RX_EN
不能同
时为
1
,同时为
0
时芯片处于
IDLE
状态
13-12 reserved
11-7 S
W
A
LLOW[4:0]
R/W
R/W
00
00000
当
RF_PLL_DIIRECT=1
时,
XM9816S
中文手册
V1.3
载波频率由寄存器直接设置:
RF={reg0[6:0],reg0[13:9]}
6-0
RF_PLL_CH_NO[6:0] R/W
110000
当
RF_PLL_DIIRECT=0
时,载
波频率由信道号设置:
f=2450MHz
RF=2402+RF_PLL_CH_NO[6:0]
Miscellaneous configuration
Register 0x01
default: 0x2077
Bit
15
Name
R/W
R/W
Description
Default
Sleep_mode
0
使能芯片进入
sleep
模式,
1
有
效(
SPI_CS
需同时保持高电平)
14
13
R/W
R/W
0
1
CRC_EN
0: CRC
关闭
1: CRC
开启
12
11
10
RF_PLL_DIRECT R/W
0
0
0
当
RF_PLL_DIIRECT=1
RF={reg0[6:0],reg0[13:9]}
否则
RF=2402+RF_PLL_CH_NO[6:0]
1: PKT/FIFO flag
低有效
0: PKT/FIFO flag
高有效
0: SPI_CS=1
时
SPI_MISO
为高
阻态输出
9
8
Pkt_hint_pority
Miso_tri_opt
R/W
R/W
1: SPI_CS=1
时
SPI_MISO
为低
电平输出
7
Reset_system
W/R
0
1
:使能芯片进行软件复位
注:复位前必须先把
reg0x1e[0]
写为
1
6-4
1:
接收到数据后发送
ACK
0:
接收到数据后不发送
ACK ,
直接进入
IDLE
3
2
Auto-ack
R/W
R/W
0
1
Pack_lenth_en
1: payload
的第一个字节作为包
长度
XM9816S
中文手册
V1.3
1
0
Fw_term_tx
R/W
R/W
1
0:
由
MCU
控制何时终止
TX
状
态
1:
当
FIFO
写指针等于读指针
时,芯片自动结束
TX
状态
0: scramble off
1: scramble on
SCRAMBLE_EN
1
PA Power Control
Register 0x02
default: 0x3080
Bit
Name
R/W
Description
Default
15-12 reserved
R/W
R/W
R/W
0011
0000
1000
11-8
7-4
reserved
reserved
rev
PA
输出功率控制:
1111: min
3-0
P
A
_PW_SET[4:0]
R/W
0000
1000: med
0000: max
Operation configuration
Register 0x03
default: 0x5800
Bit
Name
R/W
Description
Default
000: 1 byte, 10101010
15-13 Preamble_len[2:0]
R/W
001: 2 byte, 10101010 10101010
010
111: 8 byte, 10101010………….
00: 16 bits,{reg31[15:0]}
01: 32 bits, {reg31[15:0],
reg34[15:0]}
10: 48 bits, {reg31[15:0],
12-11 Syncword_len[1:0]
R/W
reg33[15:0], reg34[15:0]}
11: 64 bits, {reg31[15:0],
reg32[15:0], reg33[15:0],
reg34[15:0]}
11
000: 4 bits, 1010
10-8
7-6
Trailer_len[2:0]
R/W
R/W
001: 6 bits, 101010
…….
000
00
111: 18 bits,101010……101010
00: NRZ law data
Data packet type[1:0]
01:Manchester data type
10: 8/10 line code
11: interleave data type
XM9816S
中文手册
V1.3
00: No FEC
5-4
3
FEC type[1:0]
R/W
01: FEC 13
00
10: FEC 23
11: reserve, same as 00
000: brclk keep 0
001: xtal_core out
010: crystal divided by 6, 2M out
011: crystal divided by 12, 1M
out
2-0
brclk_sel[2:0]
R/W
000
100: APLL_clk out
101: clk_tx_out
Operating configuration
Register 0x07
default: 0x7311
Bit
15
Name
R/W Description
Default
0
EN_VCO_CAL_IDLE
R/W
1:
在
IDLE
状态人工使能
VCO
校准过程
14
TXRX_VCO_CAL_EN
R/W
1
1: TX/RX
状态下
,
VCO
自
动进行校准
TXRX
状态下
VCO
自动
校准等待时间:
0000: 12us
0001: 14us
…….
13-10 TXRX_vco_tim[3:0]
R/W
1100
1111: 42us
9-0
Timing configuration
Register 0x0b
default: 0x837F
Bit
Name
R/W
Description
Default
1000
PA
开启后,发送
CW
的时间:
0000: 4us
15-12
TX_CW_D
L
Y
[3:0]
R/W
0001: 6us
1111: 34us
XM9816S
中文手册
V1.3
ACK
功能开启时,最大重发次
数:
11-8
Re_transmit_time
R/W
0011
2H: 2 times
3H: 3 times
…….
7-6
5-0
R/W
R/W
01
发射机等待
ACK
返回的时间:
T=16us x Rx_ack_time[5:0]
Rx_ack_time[5:0]
(超过这个时间如果还没收到
返回的
ACK
信号
,
会
自动重发)
111111
Default
Timing configuration
Register 0x0c
default: 0x3E11
Bit
Name
R/W
Description
开启
TX/RX
状态后,等待
VCO
稳定时间:
000000: 4us
000001: 8us
………
15-10 VCO_ON_D
L
Y
[5:0]
R/W
001111
111111: 256us
PA
关闭延时:
00: 4us
01: 6us
9-8
TX_PA_OFF_D
L
Y
[1:0]
TX_PA_ON_D
L
Y
[3:0]
R/W
R/W
10
10: 8us
11: 10us
PA
开启延时:
x000: 4us
x001: 8us
….
7-4
3-0
0001
x1111: 32us
TX_SW
开启延时:
0000: 8us
0001: 12us
….
TX_SW_ON_DELAY[3:0] R/W
0001
11111: 68us
XM9816S
中文手册
V1.3
RSSI value
Register 0x11
Read only
Bit
Name
R
R
Description
Default
15-8
RAW_RSSI[7:0]
8 bit RSS
值
(
实时更新
,
保
留最
大值)
7-0
rssi_lat[7:0]
R
R
RSSI latch
Block status
Register 0x12
Read only
Bit
Name
Description
Default Optium
15-14
13
FIFO_FLAG
reserved
R
R
1: FIFO
为空或满的标志位
12
11
10
VCO_CAL_ERROR
R
1
:
VCO
校准失败
9-0
Main status
Register 0x16
Read only
Bit
Name
R
Description
Default Optium
15
14
CRC_error
R
R
1
:
CRC
错误
0: CRC
正确
FEC23_error
1
:
FEC23
错误
0: FEC23
正确
Framer
状态:
13-8
Framer_st
R
31H: ST_SLEEP
33H: ST_
W
A
KE_U
P
.
……..
……….
7
6
Syncword_rev
PKT_FLAG
R
R
1:
接收到
syncword
,只在接收
状态下有效
Packet flag
标志位
Transmit packet control state
000: TX_IDLE
5-3
2-0
Tx_st[2:0]
Rx_st[2:0]
R
R
001:TX_ID
010: TX_CRC
011: TX_D
A
TA
110: TX_DONE
Receive packet control state
000: RX_IDLE
001:RX_ID
XM9816S
中文手册
V1.3
010: RX_D
A
TA
011: RX_TRAILER
100: RX_DONE
110: RX_CRC
AMS TEST Control
Register 0x1c
default: 0x4008
Bit
Name
R/W
Description
Default Optim
0
15
RSSI_PDN
R/W
1:
关闭
RSSI
功能
0
:开启
RSSI
功能
14-0
R/W
1
Operating Control
Register 0x1e
default: 0x7FF4
Bit
Name
R/W
Description
Default Optim
7FF4H
15-14
0
R/W
R/W
Reg_Reset_EN
0
1:
开启软件复位功能,
1
有效。
使能后再写
reg0x01[7]
为
1
就可
完成对芯片的复位。
SYN_WORD_1 Register
0x1f default: 0x0101
Bit
Name
R/W
R/W
Description
Default
15-0
SYNC_WORD[15:0]
LSB bits of SYN_WORD is first
0101H
SYN_WORD_2 Register
0x20 default:
0x0202
Bit
Name
R/W
R/W
Description
Default
15-0
SYNC_WORD[31:16]
LSB bits of SYN_WORD is first
0202H
SYN_WORD_3 Register
0x21 default:
0x0303
Bit
Name
R/W
R/W
Description
Default
15-0
SYNC_WORD[47:32]
LSB bits of SYN_WORD is first
0303H
SYN_WORD_4 Register
0x22 default:
0x0404
Bit
Name
R/W
R/W
Description
Default
15-0
SYNC_WORD[63:48]
LSB bits of SYN_WORD is first
0404H
Register 0x23
default: 0x8001
Bit Name
R/W
Description
Default
XM9816S
中文手册
V1.3
15
FIFO_share_en
R/W
1
1: RX/TX FIFO
共享,总长
64bytes
0
:
RX/TX FIFO
不共享,各自
32bytes
14:0
FIFO threshold_reg
Register 0x24
default: 0x4401
Bit
Name
R/W
Description
Default
15-11 FIFO_empty_threshold
R/W
R/W
R/W
01000
10000
000001
认为
FIFO
为空的阈值
10-6
5-0
FIFO_full_threshold
Synword_threshold
认为
FIFO
为满的阈值
认为
syncword
正确的阈值
,
XX
表示错
XX-1 bit
也认为是正
确(设
1
表示全部正确)
RX_FIFO_RD_PTR Register
0x25 default:
0x0000
Bit
Name
R/W
Description
Default
15
14
RXFIFO_CLR_W_PTR
R/W
R/W
0
0
1:
清空
RX FIFO
写指针
RX FIFO
写指针最高位,当
fifo_share_en=1
有效
RX_FIFO_WR_PTR
[6]
13-8 RX_FIFO_WR_PTR
[5:0]
R/W
R/W
0
0
RX FIFO
写指针低
6
位
1:
清空
RX FIFO
读指针
7
RXFIFO_CLR_R_PTR
6
RX_FIFO_RD_PTR
[6]
R/W
R/W
0
RX FIFO
读指针最高位,当
fifo_share_en=1
有效
5-0
RX_FIFO_RD_PTR
[5:0]
0H
RX FIFO
读指针低
6
位
TX_FIFO_RD_PTR Register
0x26 default:
0x0000
Bit
Name
R/W
Description
Default
15
14
TXFIFO_CLR_W_PTR
R/W
R/W
0
0
1:
清空
TX FIFO
写指针
TX FIFO
写指针最高位,当
fifo_share_en=1
有效
TX_FIFO_WR_PTR
[6]
13-8 TX_FIFO_WR_PTR
[5:0]
R/W
R/W
0
0
TX FIFO
写指针低
6
位
1:
清空
RX FIFO
读指针
7
TXFIFO_CLR_R_PTR
6
TX_FIFO_RD_PTR
[6]
R/W
0
TX FIFO
读指针最高位,当
XM9816S
中文手册
V1.3
fifo_share_en=1
有效
5-0
TX_FIFO_RD_PTR
[5:0]
R/W
0H
TX FIFO
读指针低
6
位
TX_FIFO_REG Register
0x27 default:
0x0000
Bit
Name
R/W Description
Default
0000H
15-0
TX_FIFO_REG R/W
MCU
写
FIFO
数据的接口
RX_FIFO_REG Register
0x28 default:
0x0000
Bit
Name
R/W Description
MCU
读
FIFO
数据的接口
Default
0000H
15-0
RX_FIFO_REG R/W
10.
寄存器默认值和优化值
芯片共有
42
个寄存器,复位后,所有寄存器均为默认值,如表
10.1
所示。正常工作时,只
需要对少数几个寄存器的值进行优化即可,如表
10.2
所示。
表
10.1
寄存器默认值
Address reset
value Address reset
value
0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
0x0a
0x0b
0x0c
Ox0d
0x0e
0x0f
0x10
0x11
0x12
0x13
0x14
0x0030
0x2077
0x15
0x16
0x17
0x18
0x19
0x1a
0x1b
0x1c
0x1d
0x1e
0x1f
0x20
0x21
0x22
0x23
0x24
0x25
0x26
0x27
0x28
0x29
Read only
Read only
0x0000
0x6FE1
0x1300
0x07F7
0x1800
0x4008
0x0000
0x7FF4
0x0101
0x0202
0x0303
0x0404
0x8001
0x4401
0x0000
0x0000
0x0000
0x0000
0x0000
0x3080
0X5800
0x4A00
0x7126
0x1988
0x7311
0x1659
0x007B
0x2433
0x837F
0x3E11
0x6000
0x4c00
0x6609
0x5F8F
Read only
Read only
Read only
Read only
XM9816S
中文手册
V1.3
表
10.2
寄存器优化值
Address
0x0a
Opt value
0x2403
0x02
0x4060
0x03
0x5810
0x05
0x7fa6
0x0f
0x661d
0x0d
0x6003
0x1a
0x00f7
XM9816S
中文手册
V1.3
11.
典型应用电路
XM9816S
典型应用电路(
SPI
模式)
spi_miso
spi_clk
spi_cs
spi_mosi
vdd33
vss
SPI_MOSI
SPI_MISO
SPI_CLK
1
16
15
14
2
I2C_SEL
RST_N
rst_n
spi_miso
spi_mosi
rst_n
3
4
SPI_CS
PKT_FLAG
NC
spi_clk
spi_cs
pkt_flag
13
12
VDD33
XO
pkt_flag
c2 1uF
SSOP16
vss
5
c1 1uF
RF_VDD
ANT
11
10
9
6
7
8
XI
NC
ANTB
VSS
ANT
图
11.2 XM9816S
(
SPI
)典型应用电路
XM9816S
典型应用电路(
I2C
模式)
vdd33
R1
sda
vdd33
vss
SPI_MOSI
SPI_MISO
SPI_CLK
16
15
14
1
R2
scl
I2C_SEL
rst_n
sda
2
rst_n
spi_cs
3
4
RST_N
SPI_CS
PKT_FLAG
NC
scl
pkt_flag
spi_cs
13
12
VDD33
XO
pkt_flag
c2 1uF
SSOP16
vss
5
6
7
8
c1 1uF
RF_VDD
ANT
11
10
9
XI
NC
ANTB
VSS
ANT
图
11.3 XM9816S
(
I2C
地址
A4=1
)典型应用电路
注
:
I2C
模式下
,
芯
片内部在
SPI_MISO
和
SPI_CLK
脚分别集成了
4.7K
上拉电阻
,
外
部上拉电阻可根据实
际应用情况来加或不加。
XM9816S
中文手册
V1.3
12.
注意事项
12.1
上电和寄存器初始化数据
1.
芯片内部集成上电复位功
能
(
POR
)
(如果只用内部复位
,
RST_N
脚只需要拉高或悬空
)
,
T1
时间为上电复位时间,约
0.5ms
2. T2
是晶振稳定时间,约为
1.5ms
,然后由
MCU
初始化寄存器
3.
寄存器初始化完成后,芯片可以开始发射或接收数据
4.
除了内部自动复位,芯片还有其它两种复位方式:
a
、
RST_N
引脚复位:
RST_N
为低时对芯片进行复位
b
、
软
件复位
:
先
写
0x1e[0]
寄存器
为
‘
1
’
,
使
能软件复位功能
,
再
对
0x01[7]
寄存器
写
‘
1
’
就可以完成复位操作。采用内部
POR
和软件复位功能,可以省去
RST_N
引脚以节省
MCU
资源,此时
RST_N
悬空或上拉至
VDD33
即可。
初始化流程(采用内部
POR
)
XM9816S
中文手册
V1.3
12.2
进入
sleep mode
和唤醒
当
SPI_CS
拉高,并且
MCU
写寄存器
0x01[15]
为“
1
”后
,
芯片进入
sleep mode,
此时消
耗电流
<1uA, sleep mode
下寄存器的值能够保持。当
SPI_CS
拉低后
,
芯片自动唤醒进入
IDLE
状态。
MCU
要拉低
SPI_CS
一段时间
(
等待晶体稳定,约
1.5ms),
再写
SPI
数据。
12.3
数据包格式
空中数据包格式
Preamble: 1~8 bytes,
可设置
.
SYNC: 16/32/48/64 bits,
可设置
.
Trailer: 4~18 bits,
可设置
.
Payload: TX/RX data. There are 4 data types:
ꢀ
Raw data
ꢀ
8bit/10bitlinecode
ꢀ
Manchester
ꢀ
Interleave with FEC option
CRC: 16-bit CRC is optional.
12.4 FIFO
长度
默认是
64
个字节,接收和发送共用,也可设置成分开使用各
32
个字节
把
0x23[15]
设置为
0
即各使用
32
字节
12.5
清空
FIFO
指针
ꢀ
接收
FIFO
和发送
FIFO
的读写指针可通过对
0x25
,
0x26
相应寄存器写‘
1
’来清除。
当接收到数据包
,
读指针将指示
FIFO
中有多少
bytes
数据。
当接收器收到
SYNC
时,接收
FIFO
写指针会自动清
0
。
当发射器发送完数据后,发射
FIFO
读指针会自动清
0
。
12.6
数据包
payload
长度
两种方式去确定
TX/RX
包长度。当寄存器
0x01[2]=1
时,内部状态机会根据
payload
第
一个
byte
数据来检测包长度
。
如
要发
8
个字节
,
第
一个字节应写
8
,
总
字长为
9
个 字节。
当寄存器
0x01[2]=0
,
第
一个
byte
数据没什么特殊意义
。
数
据包长度将由
TX FIFO
何时为
XM9816S
中文手册
V1.3
空或者何时清空
TX_EN
来决定,见下表。
数据包长度
0x01[2]
0x01[1]
pack_length_en
fw_term_tx
0
0
当
TX_EN=0
时
,
终止发射。
当
RX_EN=0
时
,
终止接收。
当
FIFO
为空时
,
自动终止发射。
当
RX_EN=0
时
,
终止接收。
1
x
Payload
第 一 个 字 节 表 示 包 长
度
,
0
到
255bytes
。
当
发完所有的
数据后
,
发射自动终止。
1
12.7
状态机决定包长度
当寄存器
0x01[2]=1
时,
payload
的第一个
byte
表示包长度,最大长度是
255 bytes
。
12.7.1
发射时序
下面显示
TX
时序
.
:当
MCU
将寄存器
0x00[15]
写为
‘
1
’
后,同时写寄存器
0x00[6:0]
设定
好发射信道,芯片将自动根据
payload
来产生包。
MCU
需要在发射
trailer
前写入发射数
据。
ꢀ
如果包长度超过
FIFO
长度,
MCU
需要多次写
FIFO
数据。
FIFO flag (reg0x12[13])
表示
FIFO
是不是为空。
TX
时序图
XM9816S
中文手册
V1.3
MCU
发送数据包流程图
FIFO
和
PKT flags
作为
MCU
的中断信号
在上面的流程图中
,
先
使能发送状态机
,
再
写发送数据到发送
FIFO
中
,
这
样可以提高
MCU
效率,但要保证数据包在发送
TRAILER
之前写入所有数据;如果要写入的时间需要很长,
则应先写好所有数据再启动发送状态。
////////////////
发射流程例子:
1
, 初始化寄存器,即写入需要优化的寄存器值
write reg[0x0a] = 0x2403;
write reg[0x02] = 0x4060;
write reg[0x03] = 0x5810;
write reg[0x05] = 0x7fa6;
write reg[0x0f] = 0x661d;
write reg[0x0d] = 0x6003;
write reg[0x1a] = 0x00f7;
2,
清空发送
FIFO
write reg[0x26] = 0x8080;
3,
写数据到
FIFO
(假如发送数据:
0x05 0x01 0x02 0x03 0x04 0x05,
第一个字节表示长度)
write reg[0x27] = 0x0501;
write reg[0x27] = 0x0203;
write reg[0x27] = 0x0405;
4,
启动发送使能,同时设置频道
XM9816S
中文手册
V1.3
write reg[0x00] = 0x80XX;//
低
7
位为频道号
5
,等待
pkt_flag
为高,表示发送完成
12.7.2
接收时序
下面显示
RX
接收时序。当
MCU
将寄存器
0x00[14]
写为
1
并且选择好接收器信道,芯
片将打开
RX
并等待正确的
syncword
。当收到正确的
syncword
,芯片将自动开始处理数据
包。当数据包处理完毕,状态机将进入
IDLE
。
当接收到的数据包长度长于
63 bytes
,
FIFO flag
将起作用
,
意
味着
MCU
必须从
FIFO
中
读取数据。
在弱信号
、
多
径和远距离时
,
不
一定能收到正确的
syncword
。
为
了避免出现死机情况
,
MCU
需要做一个定时器
。
在
大多数应用中
,
数
据包是在一定时间窗口内可以收到的
,
如
果没收到
系统要有定时器恢复到正常模式。
接收时序图
XM9816S
中文手册
V1.3
接收流程图
/////////
接收流程例子:
1
,初始化寄存器,即写入需要优化的寄存器值
write reg[0x0a] = 0x2403;
write reg[0x02] = 0x4060;
write reg[0x03] = 0x5810;
write reg[0x05] = 0x7fa6;
write reg[0x0f] = 0x661d;
write reg[0x0d] = 0x6003;
write reg[0x1a] = 0x00f7;
2,
清空接收
FIFO
write reg[0x25] = 0x8080;
4,
启动接收使能,同时设置频道
write reg[0x00] = 0x40XX;
//
低
7
位为频道号
5
,等待
pkt_flag
为高,表示接收到一帧数据,开始从接收
FIFO
读数据
,
读出的第一个字节
为数据长度
read reg[0x28]
read reg[0x28],
。
。。。。。。
XM9816S
中文手册
V1.3
12.7.3
自动应答和自动重传
该功能可配置的寄存器有:
写寄存器
0x01[3] = 1
,使能
auto-ack
功能。
写寄存器
0x0b[11:8]
,
设
置重发次数
,
默
认值是
3
,
即
第一次发送失败后
,
再
重发
2
次。
写寄存器
0x0b[5:0],
设置等待
ACK
时间,默认是
0x3f,
每个
step
是
16us,
总共大约为
1ms
,
表
示等
待
1ms
时间如果没收
到
AC
K
包且重发次数没有到最大值就会重新发送数据包。
使能和不使能
AUTO-ACK
功能对应的
PKT_FLAG
的拉起时间也不一样:
发射方收到
ACK
包后或未收到
ACK
包但重发次数已最大,这时会拉起
PKT_FLAG
,
退出发射状态,
MCU
在
PKT_FLAG
拉高后,可读寄存器
0x16[7]
位,如果为
1
即收到
ACK
包。
接收方在收到数据包后再发出
ACK
包,然后退出接收状态,拉起
PKT_FLAG
信号。
ACK
包的时间约为
150us,
这由
preamble
和
syncword
的长度决定。
12.7.4 CRC16
校验
该功能默认为开启。
写寄存器
0x01[13]
开启或关闭
CRC
功能。
CRC
开启但
AUTO-ACK
功能没有开启时,芯片接收状态不受
CRC
状态影响,但寄存器会
有
CRC error
状态位
。
PKT_FLAG
拉起后
,
MCU
可读
0x16[15]
位判断
CRC
是否正确
,
来决
定是否需要读该帧数据。
CRC
开启且
AUTO-ACK
功能也开启,这时芯片会自动判断
CRC
是否正确,如果接收方
PKT_FLAG
拉起,说明收到一帧数据包且
CRC
正确。
12.8
应用层决定包长度
当寄存器
0x01[2]=0
时,
payload
第一个字节没有特殊意义,包长度由寄存器
0x01[1]
的状态
决定。
12.8.1 fw_term_tx=1
当寄存器
0x01[1]=1
,
在
发射数据时
,
系
统将比较发送
FIFO
的写指针和读指针
,
如
果
MCU
停止向发送
FIFO
写数据
,
芯
片将会最终探测到
FIFO
何时为空
,
然
后自动退出发射状态。
时序图如下:
注意
:
当
寄存器
0x01[1]=1,
不要让
FIFO
过空或过满
,
FIFO full/empty
阀值可以通过寄存器
XM9816S
中文手册
V1.3
FIFO THRESHOLD
设置,最优值由
SPI
速度和
MCU
读写
FIFO
速度决定。
寄存器
0x01[2:1]=2
’
b01
时发射的流程图
12.8.2 fw_term_tx=0(TX)
当寄存器
0x01[2:1]=2
’
b00
时,系统只有在写寄存器
0x00[15] tx_en=0
时停止发射。
当寄存器
0x01[2:1]=2
’
b00
时,
TX
时序图
XM9816S
中文手册
V1.3
当寄存器
0x01[2:1]=2
’
b00
时,
TX
流程图
12.8.3 fw_term_tx=0 (RX)
当
Reg0x01[2]=0
时,芯片将会在
Reg0x00[14]
写为
1
(
RX_EN=1
) 时开始接收包,此时芯
片将会自动将
RX
设定到固定的频道接收
。
在
等待一定时间使内部时钟和
RX
电路稳定后,
芯片开始在收到的信号中寻找
syncword
,一旦找到,将拉高
PKT_FLAG
,并向
FIFO
里写
收到的数据
。
PKT_FLAG
将一直为高直到
MCU
将
FIFO
中的数据读完
。
当
MCU
把数据
读完后,
PKT_FLAG
将拉低直到下个
TX/RX
周期。
当
Reg0x01[2:1
]= ‘b00 or ‘b01
时,必须由
MCU
将
Reg0x00[14]
写为
0
才能退出
RX
状
态。
当
Reg0x01[2:1]=
’
b00 or
‘
b01
时,
RX
时序图
XM9816S
中文手册
V1.3
当
Reg0x01[2:1]=
’
b00 or
‘
b01
时,
RX
流程图
12.8.4 PA
输出功率设置
PA
的输出功率可以通过寄存器
PA_PW_SET[3:0]
,
即
reg0x02[3:0]
来设置
,
reg0x02[3:0]
是一
个无符号数,数值越大,
PA
输
出功率越小。最大输出功率可到
6dBm
左
右,对应
reg0x02[3:0]=0000
,最小输出功率约为
-18dBm
左右,对应
reg0x02[3:0]=1111
。
12.8.5 RSSI
XM9816S
支持
RSSI
检测功能,在
RX
状态下,可通过
reg0x11[15:8]
直接读取实时的
RSSI
值,其检测方法如下:
(1)
、将芯片设置在
RX
状态;
(2)
、先将
reg0x1c[15]
写为
1
,关闭
RSSI
以消除之前留存的
RSSI
值。然后再将
reg0x1c[15]
写为
0
,
开
启
RSSI
检测功能
,
等
待
60us
之后就可以通过
reg0x11[15:8]
读取当下的
RSSI
值。
下图是芯片
RSSI
检测功能的实测性能:
XM9816S
中文手册
V1.3
13. FAQ
1
、如何排查
SPI/I2C
接口不工作的问题
a
、
先
检查芯片电源是否正常
,
VDD33
脚是否有电
压
(
3.3V
)
输
入
,
RF_VDD
脚是否有
1.8V
左右的电压输出;
b
、检查晶振是否起振,芯片上电复位后默认是
IDLE
状态,晶振开启,耗电约为
0.6mA
,
此时用万用表量
XI
和
XO
脚的电压应该在
0.9V
左右
,
用
示波器探头点在
XOUT
脚上应
该能看到
12MHz
正弦波(如果示波器探头电容过大、阻抗过低可能会导致晶振不起振,
建议测量时将探头打在
X10
的档位
)
;
c
、程序跑起来后,查看数字接口上是否有信号;
d
、如果上述条件都正常,接口时序也没问题,应该就能正常读写寄存器。
2
、芯片主要有哪几种状态
芯片主要有
4
种状态:
1
、
IDLE
状态:芯片上电(复位后)默认为
IDLE
状态,此时晶振开启,耗电约为
0.6mA
;
2
、
RX
状态:写寄存器
reg0x00=0x40XX
(
XX
代表信道号)即可进入
RX
状态;
3
、
TX
状态:写寄存器
reg0x00=0x80XX
(
XX
代表信道号)即可进入
TX
状态;
4
、
Sleep
状态:将
reg0x01[15]
写为“
1
”然后拉高
SPI_CS
即可进入
sleep
状态,此时芯片耗
电约为
1uA
,在
sleep
状态下,寄存器的值仍然可以保持。
3
、如何验证
TX
功能正常以及如何测试
PA
输出功率
a
、芯片上电复位,并按照说明书要求将优化值写入相应的寄存器(见表
10.2
)
;
b
、写寄存器
reg0x01=0x2070
,并写寄存器
reg0x00=0x8030
启动
TX
,用频谱仪测,
ANT
脚
上应该有
2.45GHz
的信号输出(也可以设置其它信道号进行测试
)
。
c
、改变寄存器
reg0x02
的值可以调节
PA
输出功率的大小;
4
、典型收发流程
(1)
、发送过程
:
a
、初始化寄存器,即写入需要优化的寄存器值
write reg[0x0a] = 0x2403;
write reg[0x02] = 0x4060;
XM9816S
中文手册
V1.3
write reg[0x03] = 0x5810;
write reg[0x05] = 0x7fa6;
write reg[0x0f] = 0x661d;
write reg[0x0d] = 0x6003;
write reg[0x1a] = 0x00f7;
b
、清空发送
FIFO
write reg[0x26] = 0x8080
c
、写数据到
FIFO
,如发送的数据为:
0x05 0x01 0x02 0x03 0x04 0x05
(第一个字节表示长
度,后面
5
个字节是数据,总长度为
6
个字节
)
,
则:
write reg[0x27] = 0x0501;
write reg[0x27] = 0x0203;
write reg[0x27] = 0x0405;
d
、启动发送使能,同时设置频道
write reg[0x00] = 0x80XX;
//
低
7
位为频道号
e
、等待
pkt_flag
为高,表示发送完成
(2)
、接收过程
:
a
、初始化寄存器,即写入需要优化的寄存器值
write reg[0x0a] = 0x2403;
write reg[0x02] = 0x4060;
write reg[0x03] = 0x5810;
write reg[0x05] = 0x7fa6;
write reg[0x0f] = 0x661d;
write reg[0x0d] = 0x6003;
write reg[0x1a] = 0x00f7;
b
、清空接收
FIFO
write reg[0x25] = 0x8080;
c
、启动接收使能,同时设置频道号
write reg[0x00] = 0x40XX;
//
低
7
位为频道号
d
、
等
待
pkt_flag
为高
,
表
示接收到一帧数据
,
此
时可以通过读取
reg0x16[15]
来判断
CRC
是
否正确(
reg0x16[15]=0
表示
CRC
正确,如果
CRC
出错,该位会置为“
1
” ,但再次进
入接收时
reg0x16[15]
会自动清零
)
,
如
果
CRC
正确
,
说
明接收到了正确的数据
,
则
MCU
可以从接收
FIFO
中读取所需的数据,读出的第一个字节为数据长度。
read reg[0x28]
read reg[0x28]
。。。。。。。
注
:
CRC
开启但
AUTO_ACK
没有开启的条件
下
(
芯片复位后默认状态
)
,
接
收过程中
pkt_flag
的拉高不受
CRC
影响,就是说
pkt_flag
拉高不能保证收到的数据包一定是正确的,在某些
条件下
,
就
算没有发送方发送数据过来
,
接
收方接收到的噪声或干扰也可能刚好和同步码匹
配从而拉
高
pkt_flag
。
因
此
,
pkt_fla
g
拉高
但
CRC
不正确时
,
应
该重新进入接收流
程
(
清
FIFO
、
使能接收
。
。。。。。)。
5
、
PKT_FALG
的状态如何变化
启动
TX
后,
PKT_FLAG
会自动拉低,等数据发送完成后
PKT_FLAG
拉高,进入
IDLE
之后
PKT_FLAG
依然保持为高直到再次启动
TX
或
RX
。
在默认配置下,启动
RX
后,
PKT_FLAG
会自动拉低,然后芯片会一直搜索
syncword
,
一旦接收到正确的
syncword
,
芯
片会继续接收
、
处
理后续的数据包
,
等
数据包接收完成后,
PKT_FLAG
变高并一直维持高电平状态直到再次启动
TX
或
RX
。
6
、
SYNCWORD
该如何设
在接收状态下
,
芯
片只有收到正确的
syncword
后才会继续接收
、
处
理后续的数据包
,
因
此
syncword
的设置对接收性能有一定影响
。
通
过
reg0x03[12:11]
可以设置
syncword
的长度,
XM9816S
中文手册
V1.3
通过
reg0x1f~reg0x22
可以设置
syncword
的具体数据,通过
reg0x24[5:0]
可以设置
syncword
的容错
bit
数(如设为
2
,则收到的
syncword
错
1 bit
也会收到后续的数据
)
。
如果
syncword
设得很长,容错设得很低,则有可能因为
syncword
出错而漏接发送端发过来的数据,如果
syncword
设得很短,容错设得很高,则接收到的噪声或干扰容易和
syncword
匹配上而错接
数据。因此,
syncword
的设置要根据具体的应用环境来定,一般情况下,长度设为
48bit
,
容错
1bit
,效果较好。
7
、如何使用
auto-ack
和重发功能
写寄存器
0x01[3] = 1
,
使
能
auto-ack
功能
。
写
寄存器
0x0b[11:8]
,
设
置重发次数
,
默
认值
是
3
次。开启该功能后,接收方在收到数据后会自动返回一个
ACK
信号给发送方,发送方
发送完数据后会自动进入接收状态
,
等
待接收方返回的
ACK
信号
,
如
果在一定的时间
内
(
该
时间可以通过
0x0b[5:0]
设置,默认值是
0x3f
,约
1ms
)没有收到
ACK
信号,则再次发送一
遍数据直到接收到
ACK
信号或重发次数达到最大值。以上过程由芯片内部自动完成,无需
MCU
干预。
如果发送方开启了
auto-ack
和重发功能
,
但
接收方没有开启
,
则
发送方始终无法收到
ACK
信号
,
等
待一定时间之后肯定会再次重发相同的数据直到重复次数达到最大值
。
该
设置可作
为硬件重发功能。
开启
auto-ack
和重发功能后
,
PKT_FLAG
拉高的时间和没开启该功能时的拉高时间不太
一样:发送方在收到
ACK
信号或重发次数达到最大时才将
PKT_FLAG
拉高并退出发送状
态,
PKT_FLAG
变高后可以读寄存器
0x16[7]
,如果为“
1
”则表示收到
ACK
信号。接收方
在收到数据包并自动返回
ACK
信号后拉高
PKT_FLAG
,退出接收状态。
在速率要求不高的情况下,建议打开
FEC
功能以提升性能。通过写寄存器
reg0x03[5:4]
来开启
FEC13
或
FEC23
,
FEC13
比
FEC23
具有更好的性能,但效率也较低,收发同样的数
据需要更长的时间。
8
、
sleep
状态如何进入,如何唤醒,唤醒需要多少时间
将
reg0x01[15]
写为“
1
”
,
然后拉高
SPI_CS
即可进入
sleep
状态。
SPI_CS
拉低一段时间
就可从
sleep
状态唤醒进入
IDLE
状态,唤醒时间主要由晶振起振、稳定的时间决定,一般
在
2ms
左右,待晶振起振稳定之后,就可以对芯片进行操作。
9
、如何防止
FIFO
溢出
在接收或发送长数据包时
,
为
了防止
FIFO
溢出
,
可
通过
reg0x2
4
寄存器设置相应的阈值,
超过该阈值后,芯片会给出指示,该指示可以通过
reg0x12[13] (FIFO_FLAG)
来读取。
10
、
RF
电路的
PCB
板需要注意什么
首先要保
证
R
F
芯片的电源稳定
、
干
净
。
电
源上的稳压和去耦电容尽量靠近芯片的管脚,
电源线和地线尽量粗短
。
可
用大面积的铜层作为地线用
,
没
有用到的地方可以和地线相连作
为地线用
。
如
果
RF
芯片
3.3V
供电电源的噪声或干扰比较大
,
建
议经过
RC
或
LC
滤波之后
再给
RF
芯片供电。
晶振尽量靠近
XI
和
XO
脚,连接晶振的线尽量短以减小噪声干扰和分布电容对晶振的
影响。晶振外壳应良好接地以减小对外辐射提高抗干扰能力。
推荐几款天线如下:
1
、板载天线
XM9816S
中文手册
V1.3
2
、导线天线
注:导线天线的最佳长度和具体的
PCB
布局有关,可以通过实测找到最佳值。
11
、提升芯片工作可靠性的说明
为了提升芯片工作可靠性以及产品良率,建议做以下改进:
1
、
0xoa
寄存器的优化值配置为
0x2403
;
2
、
在
每次启动收发之前,
0x07
寄存器先为
0x3f11
,
再
写为
0x7f11
,确保每次接收或发
送时,
VCO
都工作在最佳的
band
。
示例:
……
..
write reg[0x07] = 0x3f11;
write reg[0x07] = 0x7f11;
write reg[0x00] = 0x80XX(TX)
或
write reg[0x00] = 0x40XX(RX)
[XX
是信道号
]
……
..
XM9816S
中文手册
V1.3
14.
版本更新历史
版本号
V1.0
V1.1
创建时间
2015.4.20
2015.8.10
创建内容
创建者
备注
初始文档
V1.0
寄存
器
0x0
a
优化值更新
为:
0x2053
V1.2
V1.3
2016.1.15
1
、寄存器
0x03
优化值
更新为:
0x5810
2
、
完
善寄存器描述
、
增
加
F
A
Q
1
、 寄存器
0x0a
优化值
更新为:
0x2403
2
、 在每次启动收发之
前,
0x07
寄存器先
为
0x3f11
,再写为
0x7f11
2018.10.25
具体见
F
A
Q–11
