打印
[STM32F4]

关于用STM32F429IG驱动SI4463的无线模块

[复制链接]
8992|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lijiankun|  楼主 | 2015-10-22 11:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lijiankun 于 2015-10-29 17:26 编辑

最近在调试SI4463的无线模块,花了好长时间,总算是调通了,现在把调试中的一些体验和感受与大家分享一下,希望对后面做这个的朋友有所帮助吧。
   SI4463的模块有串口的接口,也有SPI的接口,我使用的是SPI的这种接口,对于SPI接口可以使用普通IO口模拟控制,也可以使用单片机自身带的SPI接口控制(我用的是IO口模拟的形式,之前刚开始的时候,想用硬件SPI接口,可是死活调不通,就连基本的通信都不通,根本没办法跟无线模块说话,现在想想,应该是自己哪里的配置没配置好,使得控制时序一直不对,这个具体的原因还没找到,找到之后再与大家分享
  
  首先一般买到的SI4463的模块如下图所示
  
  这里的管脚有12个,分别是VCC,GND,MOSI,MISO,SCK,nSEL(CSN),SDN,IRQ,GPIO0,GPIO1,GPIO2,GPIO3,前面几个管脚不用介绍了,是控制上必须的几个引脚,这里专门说一下GPIO0~GPIO3这四个引脚,GPIO0和GPIO1是状态输出引脚,会输出一些工作状态之类的,GPIO2,GPIO3是模式控制引脚,
       发射模式时GPIO2=0,GPIO3=1;
       接收模式时GPIO2=1,GPIO3=0;
但是特别注意:这两个引脚一般无线模块厂商会自己控制,不允许外部单片机控制,这个得具体看厂商给的使用手册,特别注意!!!!

   所以总结来说,就是GPIO0~GPIO3在使用的时候可以连也可以不连,它们只是为了一些状态的输出而设置的。
    下来开始调试,
     首先必须保证的就是连线正确;厂商在demo例程中一般对使用到的函数都进行了封装,所以移植起来还是很简单的,唯一可能需要变动的就是底层的SPI操作,也就是这个SPI_ExchangeByte()函数;还有就是一些管脚定义和宏定义了。
    保证底层的SPI没问题之后,SI4463本身不具有上电复位的功能,所以上电后,需要我们自己进行软复位,也就是调用这个SI446X_RESET()函数,但是可能因为不同型号的单片机,里面的延时是不一样的,这个需要自己调试的时候注意。复位之后就可以采用函数SI446X_PART_INFO()去回读设备信息,如果能回读回来说明单片机与无线模块之间的通信是通的,否则不通,需要去检查自己的引脚配置,线路连接等一些问题。
    可以回读出设备信息之后,下一步就是配置无线模块了,这里有两种方式,一种是一个个的寄存器去配,另一种就是使用WDS软件设置生成一个配置数组,然后通过SPI将配置数组的信息发到无线模块的寄存器里面去。在网上看了一些资料,发现基本上采用的都是第二种方式,很少有人用第一种方式,所以这里直接用厂商提供的demo里面的配置数组就可以了,要改参数的话,自己去用WDS生成。

配置完成之后,基本上就可以了,直接调用发送和接收函数就可以收发数据了。


上面就是这段时间调试SI4463的一些经验,也希望有相同经验的朋友一起来讨论交流,大家一起学习,共同进步
     

E10-433MD-SMA实物图.jpg (68.77 KB )

E10-433MD-SMA实物图.jpg
沙发
amanda_s| | 2015-10-22 13:22 | 只看该作者
对照无线模块的spec,看看初始化部分是否一致。有没有时序的要求呢。

使用特权

评论回复
板凳
lijiankun|  楼主 | 2015-10-23 17:50 | 只看该作者
amanda_s 发表于 2015-10-22 13:22
对照无线模块的spec,看看初始化部分是否一致。有没有时序的要求呢。

恩恩,应该就是时序不对的问题

使用特权

评论回复
地板
玛尼玛尼哄| | 2015-10-23 19:27 | 只看该作者
管脚有12个,分别是VCC,GND,MOSI,MISO,SCK,nSEL(CSN),SDN,IRQ,GPIO0,GPIO1,GPIO2,GPIO3

使用特权

评论回复
5
米尔豪斯| | 2015-10-23 21:59 | 只看该作者
可能因为不同型号的单片机,里面的延时是不一样的

这里好像经常出问题

使用特权

评论回复
6
天灵灵地灵灵| | 2015-10-23 22:04 | 只看该作者
函数SI446X_PART_INFO()去回读设备信息,如果能回读回来说明单片机与无线模块之间的通信是通的,否则不同,需要去检查自己的引脚配置,线路连接等一些问题。。
这个函数碉堡了。

使用特权

评论回复
7
lijiankun|  楼主 | 2015-10-24 13:38 | 只看该作者
玛尼玛尼哄 发表于 2015-10-23 19:27
管脚有12个,分别是VCC,GND,MOSI,MISO,SCK,nSEL(CSN),SDN,IRQ,GPIO0,GPIO1,GPIO2,GPIO3 ...

这个描述是有什么问题吗?

使用特权

评论回复
8
lijiankun|  楼主 | 2015-10-24 13:39 | 只看该作者
天灵灵地灵灵 发表于 2015-10-23 22:04
函数SI446X_PART_INFO()去回读设备信息,如果能回读回来说明单片机与无线模块之间的通信是通的,否则不同 ...

无线模块,一般都会提供一个函数,来判断单片机与无线模块之间的通信是否正常

使用特权

评论回复
9
lijiankun|  楼主 | 2015-10-24 13:43 | 只看该作者
米尔豪斯 发表于 2015-10-23 21:59
这里好像经常出问题

恩恩,是的,因为有时候延时太短的话,无线模块可能就扑捉不到这个复位信号,导致无线模块起不来而不能正常工作

使用特权

评论回复
10
FireRiver9| | 2015-10-24 17:37 | 只看该作者
感谢分享

使用特权

评论回复
11
lwsn| | 2015-10-25 16:33 | 只看该作者
关键是GPIO0~GPIO3这四个引脚,其余的都是SPI的

使用特权

评论回复
12
lijiankun|  楼主 | 2015-10-26 18:27 | 只看该作者
lwsn 发表于 2015-10-25 16:33
关键是GPIO0~GPIO3这四个引脚,其余的都是SPI的

不是呀,SPI线只有四根,MOSI、MISO、SCK、CSN。其他的都是针对无线模块的,SDN模块使能引脚,IRQ中断引脚

使用特权

评论回复
13
晓枫VS枯叶| | 2015-10-26 19:17 | 只看该作者
楼主硬件SPI调通了没,我这边硬件SPI一直出现等待CTS。

使用特权

评论回复
14
lwsn| | 2015-10-26 21:05 | 只看该作者
IRQ这个脚一般是怎么用的

使用特权

评论回复
15
lijiankun|  楼主 | 2015-10-28 18:09 | 只看该作者
晓枫VS枯叶 发表于 2015-10-26 19:17
楼主硬件SPI调通了没,我这边硬件SPI一直出现等待CTS。

硬件的SPI没调通,我的是一直在等STATE寄存器状态

使用特权

评论回复
16
lijiankun|  楼主 | 2015-10-28 18:11 | 只看该作者
lwsn 发表于 2015-10-26 21:05
IRQ这个脚一般是怎么用的

IRQ是中断引脚,当数据发送完成或者接收到数据的时候,都会触发控制单片机中断,这样就可以检测到什么时候数据发送成功,什么时候接收到数据了

使用特权

评论回复
17
lwsn| | 2015-10-29 10:39 | 只看该作者
IRQ是中断引脚,当数据发送完成或者接收到数据的时候,都会触发控制单片机中断

谢谢,这次理解透彻了,IRQ全称为Interrupt Request,即是"中断请求"的意思

使用特权

评论回复
18
晓枫VS枯叶| | 2015-10-29 11:53 | 只看该作者
我这硬件SPI貌似调通了,读取的寄存器信息有对应的表么,比如我读PART_INFO,读出来的数据都不知道是不是对的

使用特权

评论回复
19
zhuotuzi| | 2015-10-29 16:37 | 只看该作者
,直接调用发送和接收函数就可以收发数据了。

使用特权

评论回复
20
lijiankun|  楼主 | 2015-10-29 17:28 | 只看该作者
本帖最后由 lijiankun 于 2015-10-29 17:33 编辑
晓枫VS枯叶 发表于 2015-10-29 11:53
我这硬件SPI貌似调通了,读取的寄存器信息有对应的表么,比如我读PART_INFO,读出来的数据都不知道是不是对 ...

关于这个模块的API函数介绍文档里面有详细的介绍,你可以参考那里面说的。一般会定义一个有8个字节的数组,初始化后这个数组里面的值是0x00,而如果回读信息失败,里面会全变成0xFF。而如果通信正常的话,回读回来的值不是0xFF,而且第二,三个字节显示的是模块的型号,比如4463等

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

94

帖子

3

粉丝