kingmacth 发表于 2009-9-7 15:48:08

SI4432太郁闷了!!!

调了两星期了还是不能用,今天才发现原来就没发出有效引号,以前一直看RSSI位为一以为是收到信号了。今天把发射端断电结果还是1才发现原来是假的。这个东西用起来太郁闷了。官方给的例程都不想看。还没有写的精简一点的。我只需要一个最基本的能通信的就足够了。功能多的倒成麻烦了。

Appcat 发表于 2009-9-7 15:54:42

我也是这样郁闷痛苦着过来的,给你一段例程,最简单的收发,这也是论坛上的兄弟救我于水深火热之中时给我的。


void IA4432_Init(void)
{
        IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x80);
        IA4432_Register((REG_WRITE | TXRampControl), 0x7F);
        IA4432_Register((REG_WRITE | AFCLoopGearshiftOverride), 0x00);
        IA4432_Register((REG_WRITE | FrequencyBandSelect), 0x53);           //set frequency
        IA4432_Register((REG_WRITE | NominalCarrierFrequency1), 0x4b);//433HZ
        IA4432_Register((REG_WRITE | NominalCarrierFrequency0), 0x00);
        IA4432_Register((REG_WRITE | ModulationModeControl1), 0x00);                       
        IA4432_Register((REG_WRITE | ModulationModeControl2), 0x22);        //asynchronous modeFSK

        IA4432_Register((REG_WRITE | HeaderControl2), 0x02);                        //no head; sync word 3 and 2
        IA4432_Register((REG_WRITE | HeaderControl1), 0x00);
        IA4432_Register((REG_WRITE | PreambleLength), 0x04);                        //2byte
        IA4432_Register((REG_WRITE | PreambleDetectionControl), 0x10);        //8bit
        IA4432_Register((REG_WRITE | SyncWord3), 0x2d);
        IA4432_Register((REG_WRITE | SyncWord2), 0xd4);
        //IA4432_Register((REG_WRITE | TransmitPacketLength), 0x40);
        IA4432_Register((REG_WRITE | DataAccessControl), 0x88);                //enable TX handling

        IA4432_Register((REG_WRITE | IFFilterBandwidth), 0x03);                //BW=90kHZ
        IA4432_Register((REG_WRITE | ClockRecoveryOversamplingRatio), 0xa1);
        IA4432_Register((REG_WRITE | ClockRecoveryOffset2), 0x20);
        IA4432_Register((REG_WRITE | ClockRecoveryOffset1), 0x4e);
        IA4432_Register((REG_WRITE | ClockRecoveryOffset0), 0xa5);
        IA4432_Register((REG_WRITE | ClockRecoveryTimingLoopGain1), 0x00);
        IA4432_Register((REG_WRITE | ClockRecoveryTimingLoopGain0), 0x36);
        IA4432_Register((REG_WRITE | TXDataRate1), 0x02);                                //9600BPS
        IA4432_Register((REG_WRITE | TXDataRate0), 0x75);
        IA4432_Register((REG_WRITE | FrequencyDeviation), 0x48);
        IA4432_Register((REG_WRITE | ClockRecoveryGearshiftOverride), 0x13);
        IA4432_Register((REG_WRITE | GPIO0Configuration), 0x1f);
        IA4432_Register((REG_WRITE | GPIO1Configuration), 0x12);                        //GPIO_1 TX state
        IA4432_Register((REG_WRITE | GPIO2Configuration), 0x15);                        //GPIO_2 RX state
        IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x02);
        IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x00);
        IA4432_Register((REG_WRITE | InterruptEnable1), 0x02);
}

void RF_R(unsigend char *d)
{
        unsigned char index,yyy,ttt;
        IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x02);
        IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x00);
        IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x05);
        while(1)
        {
                yyy = IA4432_Register((REG_READ | InterruptStatus1),0x00);
                if(yyy&0x02) break;
        }
        IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x01);
        ttt = IA4432_Register((REG_WRITE | ReceivedPacketLength), 0x00);
        for(index=0;index<tt;index++)
        {
                d=IA4432_Register((REG_READ | FIFOAccess),0x00);
        }
}

void RF_T(unsigned char *d,unsigned char l)       
{
        unsigned char i;

        IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x01);
        IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x01);
        IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x00);

        IA4432_Register((REG_WRITE | InterruptEnable1), 0x00);                               
        IA4432_Register((REG_WRITE | InterruptEnable2), 0x00);                               

        IA4432_Register((REG_WRITE | TransmitPacketLength),l);
        for(i=0;i<l;i++)
        {
                IA4432_Register((REG_WRITE | FIFOAccess),*d);
                d++;
        }
       
        IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x09);
        IA4432_Register((REG_WRITE | InterruptEnable1), 0x04);                                //使能发送有效包中断
        while((IA4432_Register((REG_READ | InterruptStatus1), 0x00)&0x04)==0);
}

kingmacth 发表于 2009-9-7 16:02:52

太感谢了。苹果猫救星啊!!!

kingmacth 发表于 2009-9-7 16:48:28

哈哈。终于能收了。谢谢!

anna__xs 发表于 2009-9-7 22:32:37

呵呵!Appcat 苹果猫要给版权费的哦!!!开玩笑了,哈哈。希望能帮到各位!!!

Appcat 发表于 2009-9-7 22:54:36

楼主要请【4楼】 anna__xs 吃大餐哦,他才是这个代码的正主,我只是借花献佛。呵呵

kingmacth 发表于 2009-9-8 08:16:30

哦。谢谢四楼的兄弟、真是帮大忙了。

anna__xs 发表于 2009-9-8 09:12:20

呵呵,希望能帮到大家!!!努力把4432做好!

ppa8086xp 发表于 2009-9-8 09:27:14

mark

anna__xs 发表于 2009-9-8 09:42:17

ppa8086xp你的项目进行的如何了?

li_hong_shi 发表于 2009-11-13 15:53:30

上面几位做出来的大师们,帮帮我这个小弟吧,我的数据就是发布出去啊

wfs081 发表于 2009-12-21 19:03:19

看贴的大师请帮帮忙:我的邮箱:wfs08181@163.com
一、我的发射板频率设置是433点频,实际发射有很大误差约200K,而且波形顶端呈M型--带宽达200K;
二、Appcat苹果猫回帖内容很好,我想借用其中的收发程序段(RF-T/RF_R);发现IA4432_Register()函数无法找到:
在网上找到个很类似的SpiRfWriteAddressData,但是无返回值,对于RF-R执行不了;
void SpiRfWriteAddressData(uint8 address, uint8 d)
{
        RF_NSEL_PIN = 0;
        SpiWrite(address);
        SpiWrite(d);
        RF_NSEL_PIN = 1;
}
其中SpiWrite为:
void SpiWrite(uint8 spi_in)
{
        SPI1DAT = spi_in;                                        //write data into the SPI register
        while( SPIF1 == 0);                                        //wait for sending the data
        SPIF1 = 0;                                                        //clear interrupt flag
}

XU_MAJIA 发表于 2009-12-24 12:09:53

正好要用,按个印子

walkiss 发表于 2010-1-5 23:18:22

收藏先,等到了这一步直接拿出来用,谢了哈!

lihui_mc 发表于 2010-1-10 10:44:53

苹果猫的RF_R函数有点问题:
ttt = IA4432_Register((REG_WRITE | ReceivedPacketLength), 0x00);
改为:
ttt = IA4432_Register((REG_READ | ReceivedPacketLength), 0x00);

RF_Xu 发表于 2010-2-3 00:34:52

remark

dream_mcu 发表于 2010-3-9 10:10:41

哎, 我也正在做呀, 没有程序。。。

shmily 发表于 2010-3-9 10:12:48

mark备用

rei1984 发表于 2010-3-9 10:22:02

mark

taishan 发表于 2010-3-10 23:30:06

这样的程序只能出庸品,不可能是上品,更不会是极品。 呵呵

windy__xp 发表于 2010-3-11 08:55:21

回复【19楼】taishan
这样的程序只能出庸品,不可能是上品,更不会是极品。 呵呵
-----------------------------------------------------------------------
    是的,这个程序最多只是用来参考一下初始化流程,如果什么都想用现成的,而不仔细去阅读数据手册,应用文档,不可能做出好的产品。

windy__xp 发表于 2010-3-11 09:03:42

另外,觉得调试痛苦的,一般是太猴儿急的,数据手册都没完整看一遍,更不用说阅读相关应用文档,然后就随便找些参考程序来调,出问题了又不知道问题在那里,然后茫然的到处查资料,不痛苦才怪。

    相信一句话,磨刀不误砍柴工,只有踏踏实实一步一步的走,才是正道,SI4432的文档写得是不怎么样,但是反复多看几遍,保证调试非常顺利。

yanjin2003 发表于 2010-6-25 08:56:08

怎么都没有完整的例子呀

AKlove 发表于 2010-6-29 11:37:13

我用的是这种http://item.taobao.com/item.htm?id=3357644114 ,这家老板还是很敬业
他这个设计上加了电子开关,不是直接4432内部IO控制收发,使用起来简单很多,很爽
4432速度40k时距离不是很远,得低波特率下还好点

zjth1 发表于 2010-6-29 12:30:24

M

zjth1 发表于 2010-6-29 12:32:47

M

JnzGoto 发表于 2010-6-30 08:04:21

有没有人用过SI4421呢?

windy__xp 发表于 2010-6-30 08:45:43

回复【24楼】AKlove
我用的是这种http://item.taobao.com/item.htm?id=3357644114 ,这家老板还是很敬业
他这个设计上加了电子开关,不是直接4432内部io控制收发,使用起来简单很多,很爽
4432速度40k时距离不是很远,得低波特率下还好点
-----------------------------------------------------------------------
   晕,真能扯,这个射频开关,SI4432参考设计都要求加的,并且不带MCU,也敢要70,怎么不去抢。如果带MCU,已经写好程序的,这个还可以说说程序质量的好坏,或者带什么协议。仅仅一个硬件模块,看不出有多大的增值。

回复【27楼】JnzGoto
有没有人用过si4421呢?
-----------------------------------------------------------------------
   是SI4431么?SI4431跟SI4432程序都可以一样的,SI4421没有用过。

winnerme 发表于 2010-6-30 09:37:56

做个记号,最近也在研究433MRF选型跟协议。有没有什么建议呢,共同交流。谢谢!

JnzGoto 发表于 2010-6-30 10:26:16

回复【28楼】windy__xp 龙笑
-----------------------------------------------------------------------

是Si4421.
以后估计会大量用到这块芯片,来看看有没有人有同样的经验,做做功课。

eiglxl 发表于 2010-6-30 10:45:59

回复【28楼】windy__xp龙笑
-----------------------------------------------------------------------

你好,你的4432批量了么,效果怎么样?

format 发表于 2010-7-14 23:18:39

回复【21楼】windy__xp 龙笑
    另外,觉得调试痛苦的,一般是太猴儿急的,数据手册都没完整看一遍,更不用说阅读相关应用文档,然后就随便找些参考程序来调,出问题了又不知道问题在那里,然后茫然的到处查资料,不痛苦才怪。
    相信一句话,磨刀不误砍柴工,只有踏踏实实一步一步的走,才是正道,si4432的文档写得是不怎么样,但是反复多看几遍,保证调试非常顺利。
-----------------------------------------------------------------------

这手册不错了,看看也是亚迅翻译的9E5,那一个乱

还有RDA的,中英文的同一个寄存器,都能给你翻译出2样来

logers 发表于 2010-11-29 15:49:33

Mark

452582621 发表于 2011-1-5 15:59:45

mark!

flywater 发表于 2011-1-5 20:17:05

不错

alonemars 发表于 2011-1-7 18:37:51

mark

jason_more 发表于 2011-4-3 14:40:25

已经将手册看了两遍,感觉芯片还行

s2007s 发表于 2011-4-3 19:23:36

不是吧 楼上的兄弟 我也在看 交流下吧

fengzs918 发表于 2011-8-5 20:09:30

数据手册我都读了好及遍了

fengzs918 发表于 2011-8-5 20:20:34

IA4432_Register((REG_WRITE | ModulationModeControl2), 0x22); //asynchronous modeFSK
有问题的呀看来还是在忽悠人的

frozenwolf 发表于 2011-12-25 15:12:44

mark

whuctx 发表于 2011-12-25 15:28:06

mark

gaocen100 发表于 2011-12-27 00:07:23

mark~

_yuming 发表于 2011-12-27 00:21:53

今晚SI4432在STM32上使用硬件SPI测试通过,通讯一切正常,不过没有使用协议。。。。只是简单的写了个协议,测试通过。。。

xinjie1023 发表于 2011-12-27 16:21:20

关注

sam_gg 发表于 2012-1-3 09:33:43

学习了!

glm541 发表于 2012-2-1 16:58:13

学习了

ouyang_stm 发表于 2012-2-9 21:28:08

回复【46楼】_yuming
-----------------------------------------------------------------------

你好,我最近也在用STM32驱动SI4432,但程序一直调试不过,郁闷中啊,不知能否一睹你的代码?供小弟我学习下,感谢为先

ouyang_stm 发表于 2012-2-9 21:29:52

回复【46楼】_yuming
-----------------------------------------------------------------------

我的邮箱是286518224@qq.com,希望得到您的帮助,谢谢!

ouyang_stm32 发表于 2012-2-16 11:05:18

回复【46楼】_yuming
-----------------------------------------------------------------------

你好,不知能否借鉴你的基于STM32的SI4432无线模块收发调试程序?我最近刚接手这个,之前了解较少,比较郁闷啊,我的邮箱的是286518224@qq.com,希望得到你的帮助,谢谢哦

MarkLi 发表于 2012-2-21 17:40:08

回复【31楼】eiglxl
-----------------------------------------------------------------------

RDA也做sub-GHz的芯片么?
页: [1]
查看完整版本: SI4432太郁闷了!!!