Si4432无法改变传输速率
各位大侠,我在调试SI4432时,原来使用40Kbps传输速率,想修改成9.6Kbps,使用EXCEL计算出R6E=4E、R6F=A5、R70=2E的值后修改这三个寄存器值(在发送端和接收端进行了同样的修改)。结果发送可以正常发送,接收不能正确接收(接收标志位始终为0)。
希望大侠们给分析一下原因。附上接收函数
u8 RF4432_RxPacket(void)
{
Clr_PAC;
RF4432_WriteReg(INTERRUPT_ENABLE_1, 0x02);
RF4432_WriteReg(OPERATING_FUNCTION_CONTROL_1,0x05);//接收
if(READ_RF4432_IRQ==RESET)
{
if(RF4432_ReadReg(INTERRUPT_STATUS_1)&0X02)
{
if(RF4432_ReadReg(INTERRUPT_STATUS_1)&0x01)return 2;
return 1;
}
}
return 0;
} 回复【楼主位】jinguoju
-----------------------------------------------------------------------
有没有哪位修改过发射速率呀?帮帮忙呀~~~~ 回复【楼主位】jinguoju
-----------------------------------------------------------------------
看来只能自己顶了
各位都没有修改过传输速率吗?能不能替我试一下你们的行不行。是只修改那三个寄存器吗? 买过个开发板,可惜没有程序,带个液晶屏可是调频率、速率啥的,我的程序现在还有点问题,收发必须用一个程序才行,只接收直接收不到,郁闷。 回复【3楼】40560335 柏拉图的永恒
-----------------------------------------------------------------------
你的主芯片是什么? 回复【4楼】jinguoju
-----------------------------------------------------------------------
还必须修改0x1c 0x20 0x21 0x22 0x23 0x24 0x25寄存器 同意楼上 楼上正解,不只是修改波特率的3个寄存器,应该有10多寄存器要修改,你对照那个表格一一检查一遍 回复【7楼】wendan
-----------------------------------------------------------------------
si4432稍微修改一次 一大推的寄存器会变动 比较麻烦,不过用熟悉了还是一样的,
跟个问题啊 如果我需要一对多通讯的话 如何设置ID
难道是使用FIFO载荷包拿几个BYTES出来当地址ID使用???没看到有ID地址设置。。。。。。。
同步字节可以可以自己写,收发一样的,但那也只是一对一通讯,多机的话只能是使用数据包做ID来区分??????求解 回复【8楼】zplmcu
-----------------------------------------------------------------------
之前我做的东西确实是在载荷中加ID来区分的,对于一对多通信是没有问题的 回复【9楼】wendan
-----------------------------------------------------------------------
to wendan
楼上你好 ,在调试SI4432的时候 也遇到楼主的问题 ,
但是我相关连的寄存器都有设置
#define TRX_FREQUENCY (433000000L) //载波
#define TRX_CHANNEL_SPACING (0) //跳频
#define TRX_DEVIATION (20000L) // 偏频
#define TRX_DATA_RATE (60000L) //速率
#define RX_BANDWIDTH (100000L) //IF滤波器带宽
phyWrite(EZRADIOPRO_AFC_LOOP_GEARSHIFT_OVERRIDE, DEFAULT_AFC_LOOP_GEARSHIFT_OVERRIDE); // 0x1D //使能AFC频率校正
phyWrite(EZRADIOPRO_CLOCK_RECOVERY_OVERSAMPLING_RATIO, CALC_CLOCK_RECOVERY_OVERSAMPLING_RATIO(RX_DWN3_BYP,RX_NDEC_EXP,TRX_DATA_RATE)); // 0x20.//时钟恢复过抽样率
phyWrite(EZRADIOPRO_CLOCK_RECOVERY_OFFSET_2,CALC_CLOCK_RECOVERY_OFFSET_2(RX_DWN3_BYP,RX_NDEC_EXP,TRX_DATA_RATE)); // 0x21
phyWrite(EZRADIOPRO_CLOCK_RECOVERY_OFFSET_1, CALC_CLOCK_RECOVERY_OFFSET_1(RX_DWN3_BYP,RX_NDEC_EXP,TRX_DATA_RATE)); // 0x22
phyWrite(EZRADIOPRO_CLOCK_RECOVERY_OFFSET_0, CALC_CLOCK_RECOVERY_OFFSET_0(RX_DWN3_BYP,RX_NDEC_EXP,TRX_DATA_RATE)); // 0x23
phyWrite(EZRADIOPRO_CLOCK_RECOVERY_TIMING_LOOP_GAIN_1, CALC_CLOCK_RECOVERY_TIMING_LOOP_GAIN_1(TRX_DATA_RATE,RX_DWN3_BYP,RX_NDEC_EXP,TRX_DEVIATION)); // 0x24
phyWrite(EZRADIOPRO_CLOCK_RECOVERY_TIMING_LOOP_GAIN_0,CALC_CLOCK_RECOVERY_TIMING_LOOP_GAIN_0(TRX_DATA_RATE,RX_DWN3_BYP,RX_NDEC_EXP,TRX_DEVIATION));// 0x25
phyWrite(EZRADIOPRO_AFC_LIMITER,AFC_LIMIT ); // 0x2A
相关的寄存器已经修改 ,通过仿真确实数据是没问题的
#define TRX_DEVIATION (20000L) // 偏频
#define TRX_DATA_RATE (60000L) //速率
#define RX_BANDWIDTH (100000L) //IF滤波器带宽
这三个 是按着那个来算的 BANDWIDTH=TRX_DATA_RATE+2*TRX_DEVIATION 符合这个规律
上面给的这个值是可以通讯的 ,但是稍微修改其中一个变量, 可能能通讯可能不能通讯 ,速率低于30K根本无法通讯,大于100也通讯不了,
这三者是不是有相应的要求,没看到datasheet 有介绍三者的联系,程序中关联寄存器会自动修改的,启动了AFC 回复【10楼】zplmcu
-----------------------------------------------------------------------
偏频各个速率下参考值不同,9.6k波特率建议 45KHz,57.6K速率建议30KHz,当然也可以设置更低,前提是晶体中心频率够准,不能通信会不会是晶体的频率偏的比较大,另外带宽应该是计算的3db带宽,用excel表格输入参数会显示BW值,通过 1C,20~25寄存器来设置,另外excel表格要确认是否是对应的版本,si4432应该有V2 、B1等几个版本,版本不同某些寄存器的设置也是不同的 回复【12楼】wendan
-----------------------------------------------------------------------
谢谢提醒,现在是根据BI版本的excel表格来计算的,测试了下 几个速率都可以通讯。。。。。。
查看了相关文档,对于各个波段,速率 带宽 都相互影响着,这个配置比较灵活, 回复【13楼】zplmcu
-----------------------------------------------------------------------
不用客气,速率和偏频这两个参数对通信距离有很大影响,同一个波特率下,如果晶振够准,中心频率偏差较小,那么你的偏频可以设置小,这样带宽会窄,接收灵敏度会高些,偏频大些,那么接收更可靠(因为不能保证中心频率不偏),excel表格上可以看出,当你改变偏频值,理论接收灵敏度值在变化,这样可以有个参考。我也有一段时间没接触了,以前做的东西也不是很稳定。 回复【14楼】wendan
-----------------------------------------------------------------------
感谢wendan的详细解答,这个问题我很早解决了。wendan说得很详细,也是我的问题所在,可惜的是没能帮上我,希望这个正解能帮助到更多的人。 我也正在做,距离短,怎么办呢?
页:
[1]