搜索
bottom↓
回复: 9

【求助】SI4432 能发不能收

[复制链接]

出0入0汤圆

发表于 2012-4-17 10:43:51 | 显示全部楼层 |阅读模式
经过1周的努力,现在可以发了,但是却怎么都收不到数据,请教下,软件没有初始化好还是硬件问题呢?
初始化函数
  1. SDN_CLR;                                          
  2. Delay_ms(1000);
  3. SpiWriteAddressData( 0x07 , 0x80);
  4. Delay_ms(100);

  5. SpiReadAddressData(0x03);
  6. SpiReadAddressData(0x04);
  7.        
  8. SpiWriteAddressData( 0x05 , 0x00);
  9. SpiWriteAddressData( 0x06 , 0x00);
  10.        
  11. SpiWriteRegister(0x09, 0x7F);
  12.        
  13. SpiWriteAddressData( 0x0B , 0x12);
  14. SpiWriteAddressData( 0x0C , 0x15);
  15. SpiWriteAddressData( 0x0D , 0x1F);               
  16.        
  17. SpiWriteAddressData( 0x75 , 0x53);
  18. SpiWriteAddressData( 0x76 , 0x4b);
  19. SpiWriteAddressData( 0x77 , 0x00);
  20.        
  21. SpiWriteRegister(0x6E, 0x4E);                                                            //write 0x4E to the TXDataRate 1 register
  22. SpiWriteRegister(0x6F, 0xA5);                                                            //write 0xA5 to the TXDataRate 0 register
  23. SpiWriteRegister(0x70, 0x2C);
  24. SpiWriteRegister(0x72, 0x48);
  25. SpiWriteRegister(0x1C, 0x1E);                                                            //write 0x1E to the IF Filter Bandwidth register        
  26. SpiWriteRegister(0x20, 0xD0);                                                            //write 0xD0 to the Clock Recovery Oversampling Ratio register        
  27. SpiWriteRegister(0x21, 0x00);                                                            //write 0x00 to the Clock Recovery Offset 2 register        
  28. SpiWriteRegister(0x22, 0x9D);                                                            //write 0x9D to the Clock Recovery Offset 1 register        
  29. SpiWriteRegister(0x23, 0x49);                                                            //write 0x49 to the Clock Recovery Offset 0 register        
  30. SpiWriteRegister(0x24, 0x00);                                                            //write 0x00 to the Clock Recovery Timing Loop Gain 1 register        
  31. SpiWriteRegister(0x25, 0x24);                                                            //write 0x24 to the Clock Recovery Timing Loop Gain 0 register        
  32. SpiWriteRegister(0x1D, 0x40);                                                            //write 0x40 to the AFC Loop Gearshift Override register        
  33. SpiWriteRegister(0x1E, 0x0A);                                                            //write 0x0A to the AFC Timing Control register        
  34. SpiWriteRegister(0x2A, 0x20);
  35. SpiWriteRegister(0x34, 0x0A);                                                            //write 0x0A to the Preamble Length register
  36. //set preamble detection threshold to 20bits
  37. SpiWriteRegister(0x35, 0x2A);                                                         //write 0x2A to the Preamble Detection Control  register

  38. //Disable header bytes; set variable packet length (the length of the payload is defined by the
  39. //received packet length field of the packet); set the synch word to two bytes long
  40. SpiWriteRegister(0x33, 0x02);                                                            //write 0x02 to the Header Control2 register   

  41. //Set the sync word pattern to 0x2DD4
  42. SpiWriteRegister(0x36, 0x2D);                                                            //write 0x2D to the Sync Word 3 register
  43. SpiWriteRegister(0x37, 0xD4);                                                            //write 0xD4 to the Sync Word 2 register

  44. //enable the TX & RX packet handler and CRC-16 (IBM) check
  45. SpiWriteRegister(0x30, 0x8D);                                                            //write 0x8D to the Data Access Control register
  46. //Disable the receive header filters
  47. SpiWriteRegister(0x32, 0x00 );                                                        //write 0x00 to the Header Control1 register            
  48. //enable FIFO mode and GFSK modulation
  49. SpiWriteRegister(0x71, 0x63);                                                            //write 0x63 to the Modulation Mode Control 2 register

  50. /*set the GPIO's according to the RF switch */
  51. SpiWriteRegister(0x0C, 0x12);                                                            //write 0x12 to the GPIO1 Configuration(set the TX state)
  52. SpiWriteRegister(0x0D, 0x15);                                                            //write 0x15 to the GPIO2 Configuration(set the RX state)

  53. /*set the non-default Si443x registers*/
  54. //set  cap. bank
  55. SpiWriteRegister(0x09, 0x1f);                                                            //write 0xD7 to the Crystal Oscillator Load Capacitance register

  56. /*enable receiver chain*/
  57. SpiWriteRegister(0x07, 0x05);                                                            //write 0x05 to the Operating Function Control 1 register
  58. //Enable two interrupts:
  59. // a) one which shows that a valid packet received: 'ipkval'
  60. // b) second shows if the packet received with incorrect CRC: 'icrcerror'
  61. SpiWriteRegister(0x6D, 0x1F);
  62. SpiWriteRegister(0x05, 0x03);                                                         //write 0x03 to the Interrupt Enable 1 register
  63. SpiWriteRegister(0x06, 0x00);                                                         //write 0x00 to the Interrupt Enable 2 register
  64.        
  65. SpiWriteRegister(0x07, 0x01);
复制代码
图纸:


用的是B版的4432,也用excel表格计算过,也是不行的。

接受发送函数用的苹果猫给的参考程序。
  1. void RF_R(unsigned char *d)
  2. {
  3. unsigned char index,yyy,ttt;
  4. SpiWriteAddressData( OperatingFunctionControl2 , 0x02);
  5. SpiWriteAddressData( OperatingFunctionControl2 , 0x00);
  6. SpiWriteAddressData( OperatingFunctionControl1 , 0x05);


  7. while(1)
  8. {
  9. yyy = SpiReadAddressData(InterruptStatus2);
  10. yyy = SpiReadAddressData(InterruptStatus1);
  11. LEDRX_ON;
  12. WDR();
  13. if(yyy&0x02) break;
  14. }
  15. LEDRX_OFF;
  16. SpiWriteAddressData( OperatingFunctionControl1 , 0x01);

  17. ttt = SpiReadAddressData(ReceivedPacketLength);

  18. for(index=0;index<ttt;index++)
  19. {
  20. d[index]=SpiReadAddressData(FIFOAccess);
  21. }
  22. SendUARTData(d,ttt);
  23. }


  24. void RF_T(unsigned char *d,unsigned char l)
  25. {
  26. unsigned char i;

  27. SpiWriteAddressData( OperatingFunctionControl1 , 0x01);
  28. SpiWriteAddressData( OperatingFunctionControl2 , 0x01);
  29. SpiWriteAddressData( OperatingFunctionControl2 , 0x00);

  30. SpiWriteAddressData( InterruptEnable1 , 0x00);
  31. SpiWriteAddressData( InterruptEnable2 , 0x00);

  32. SpiWriteAddressData( TransmitPacketLength , l);

  33. for(i=0;i<l;i++)
  34. {
  35. SpiWriteAddressData( FIFOAccess , *d);
  36. d++;
  37. }

  38. SpiWriteAddressData( OperatingFunctionControl1 , 0x09);
  39. SpiWriteAddressData( InterruptEnable1 , 0x04);//使能发送有效包中断

  40. while((SpiReadAddressData(InterruptStatus1)&0x04)==0)
  41. {
  42. LEDTX_ON;
  43. WDR();
  44. }
  45. LEDTX_OFF;
  46. }
复制代码
只要能完成最起码的接收发送就行,没做过无线,调试起来真是一头雾水,求高手帮帮忙。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2012-4-17 15:15:31 | 显示全部楼层
有人能帮帮我吗?越高越迷糊了

出0入0汤圆

发表于 2012-4-18 09:39:31 | 显示全部楼层
随着大家对SILABS的了解,和对SI4432的兴趣,特拿出一些开发时注意的地方告诉大家,以免大家在开发过程中在犯错。
  一、在开发硬件时:
      1、布线尽量均匀,按照50欧姆的要求去画,
      2、记得过孔、铺地。
      3、亏电电路尽量小,
  二、软件调试:
      1、按照原长的例程去修改,不要自己来设置寄存器,
      2、原长会有寄存器设置工具
      3、做简单的硬件测试和软件判断
      4、确认需要修改的寄存器值是否是正确的,
  三、注意问题:
      1、晶体的精度可能导致你接收不到信号
      2、发射和接收的频率是否一致
   发射机是否正常
(1)看频谱
(2)设置中断
(3)测量电流是否是在正常工作的值
(4)采用内置PN9做信号源
接收机是否正常
(1)采用信号发生器
(2)设置中断
(3)测量电流
还有一些,后续加上。
  有其他问题希望交流!!QQ:113714426

附加一些:
元器件放置以及布线注意事项:

芯片是4.0mm*4.0mm,20脚QFN封装,底部为地。必须通过一些过孔将芯片的地与pcb板的地很好的结合起来;
为了减少不必要的耦合,尽量避免一些较敏感的数字(和MCU相通信的网络),
射频走线平行,芯片底部不能走线。同样是为了尽量减少耦合,确保相同网络的走线线宽要相同,以及在空间允许的范围内敏感走线间距离至少为线宽的3倍;
在射频前端电路,相邻电感成相互垂直状放置,以较少耦合;
发射电路和接收电路中间留下足够大的地,避免相互间的耦合;
偏置电路中的扼流电感尽量靠近TX脚,减少发射对接收电路的影响;
射频电路中的元器件,尽量靠拢并使用较小封装的元器件,减少寄生电容的产生或影响;
在空间允许的情况下,尽量保持射频走线和地之间的距离,最好大于0.5mm;
射频电路中,元器件接地的脚周围放置尽量多的过孔来减少寄生电感及其影响;
电源滤波电路中的电路应该尽量靠近vdd脚,以确保滤波电容和VDD间的环路面积最小;(要强调一点,参考电路中的电源滤波电容一个都不能少,每个电容都有其作用。此前有过,因为少了某个电容致使模块工作不正常,死机的现象发生)
晶振尽量靠近芯片减少寄生电容的产生,寄生电容过多容易产生频率漂移,晶体下面不要走任何线,特别是电源线;
射频前段电路放置尽量大的地和足够多的过孔,射频走线下面(BOTTOM 面)尽量不要走线或走过长的线,这样可以避免信号通过它们辐射出去;
射频线宽尽量粗,pcb板近量薄。


出0入25汤圆

发表于 2012-4-18 09:46:17 | 显示全部楼层
si4432 由发送状态切换到接受状态需要一段时间,本人调试时最小到6ms,再小就只能发不能收了!

出0入0汤圆

 楼主| 发表于 2012-4-18 15:11:18 | 显示全部楼层
墨非 发表于 2012-4-18 09:46
si4432 由发送状态切换到接受状态需要一段时间,本人调试时最小到6ms,再小就只能发不能收了! ...

感谢,我再试试,我现在怀疑还是我没有初始化好,找到好多V版的程序,貌似B版和V版好多区别,文档不看全了还真难搞。

出0入0汤圆

发表于 2012-11-6 00:03:50 | 显示全部楼层
MiniCat 发表于 2012-4-18 15:11
感谢,我再试试,我现在怀疑还是我没有初始化好,找到好多V版的程序,貌似B版和V版好多区别,文档不看全 ...

你好!
迷你CAT,可不可以分享一下你调好的程序,我也是刚开始调si4432,能发,但收不到。很是折磨人啊!
我的邮箱:hwc0702@126.com
谢谢!

出0入0汤圆

发表于 2013-1-21 02:28:27 | 显示全部楼层
初始化

出0入0汤圆

发表于 2013-4-19 10:22:09 | 显示全部楼层
现在我也是只能发 不能收 求指导啊

出0入0汤圆

发表于 2013-4-19 15:16:40 | 显示全部楼层
caoyiping 发表于 2013-1-21 02:28
初始化

您好 我是新注册所以不能加您好友 麻烦问下 我的扣扣号码是527540746 您能加我扣扣吗? 我有问题想向您咨询。谢谢。

出0入0汤圆

发表于 2013-4-19 15:18:23 | 显示全部楼层
MiniCat 发表于 2012-4-18 15:11
感谢,我再试试,我现在怀疑还是我没有初始化好,找到好多V版的程序,貌似B版和V版好多区别,文档不看全 ...

您好 麻烦问下 您现在这个问题解决了吗? 我也遇到了这个问题 很折磨人!如果解决了 望您赐教 我的扣扣号码是527540746。我是新手加不了您好友。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 03:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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