« 上一篇下一篇 »

A7105应用总结

是时候总结一波了,不然过几天就忘记了。

A7105——2.4G无线收发模块,最大传输速率为500KHz,采用3线或4线SPI通信

一、半双工无线通信

1、RX模式

配置步骤:

①初始化:芯片复位、写ID、芯片配置、校准

②设置接收信道:先进入待机模式,然后设置接收信道

③进入RX模式:发送RX选通命令,再由MCU进行130us的延时

④从FIFO读取数据

由官方流程图可知,在一般FIFO模式下,在进入RX模式接收完数据后,A7105会自动返回待机模式,TX模式同理。所以在此模式下,我们只管进行数据读取或发送就行了,不用每次都手动配置成待机模式。

2、TX模式

配置步骤:

①初始化:芯片复位、写ID、芯片配置、校准(如果之前已经配置过就可省略此步骤)

②设置发送信道:先进入待机模式,然后设置发送信道(注意发送信道要比接收信道大1

③写入数据到FIFO:此处与RX模式(先进入RX模式再接收)有所不同,TX模式要先写入数据到FIFO,之后才能发送选通命令进入TX模式

④进入TX模式:发送TX选通命令后,由A7105芯片进行130us的自动延时(通过寄存器进行设置),之后便进入发送模式,由芯片自动进行数据发送

3、FIFO

A7105的缓冲区FIFO提供了3种设置:简单FIFO、分段FIFO、扩展FIFO。

我们一般应用简单FIFO,它自带的存储空间最大为64字节,可通过寄存器配置来改变FIFO空间大小。

二、状态指示

我以前写程序基本上很少有状态指示的,后来被老张说了一顿,于是就加入了状态指示,看起来效果还不错。

1、加入状态指示灯,你可以清楚的知道你的单片机是不是在正常运行。

2、如果出现了问题,能够知道问题出在哪里,至少可以缩小问题范围。

三、时间消耗

这个也是以前不会考虑的方面,以前我写程序,反正就是一点,能够实现功能就行了,哪还去管它花了多少时间,时间又是花在了哪里?哪些地方可以进行优化。看起来我还是有进步的,因为现在我会考虑这些问题了,而且还有所收获。

时间消耗我是用定时器来测量的,看哪些代码用了多长时间,比如在这个半双工程序的TX流程中,一开始反正能用,后来一测时间,竟然需要几十个ms,这下就不对劲了,如果光是发送几个字节的数据就得花这么多的时间,那还怎么进行无线控制?而且之前测的接收只需要几个ms,所以就找原因呗,找呀找,原来在发送完数据后多了一条延时代码,把这条代码一去掉,哈哈,时耗一下子少了好多,基本上与接收时耗差不多。这就是进行时耗测试的好处,如果我不进行这一操作,我不可能知道那里多了一条延时代码,或者是以为必须要那条延时代码,可是一测量时间消耗,一进行分析,就知道不对了,哪需要这么长的时间,所以我最后就把时间缩短了好多嘛,而这,是用肉眼看不出来的。之前,我简单的认为,代码写完了,功能实现了,就OK了,哪知道原来这中间还有这么大的差别。总之,不管是做单片机还是做其他软件,都要考虑时间的消耗,而且要进行具体的时耗测量,要知道你的时间花到哪里去了,这样写出来的代码才够精炼,花的时间最少。

下面是我测量的A7105半双工程序各步骤的时间消耗:

四、半双工程序

半双工就是可以双向通信,即可收可发,所以双方的程序必须是一样的,如果不一样,调试就会变得非常复杂。

我之前写的程序有点不一样,后来被老张一说,又花了一些时间进行修改,终于两块单片机的程序是一样的了(只有硬件接口不同),重申一遍,双向通信的程序,即可收可发的通信程序,如半双工通信、全双工通信等,所有平台的代码都必须是一模一样的(除了硬件接口),基本一样都不行,也就是说,所有平台的程序都是同一个程序。

五、半双工通信协定

我这里设置的是:初始化为接收模式,然后通过按键(由中断检测)进入发送模式进行数据发送,发送完毕再进入接收模式,从而就可以实现无差错的半双工通信。即按键的一方为发送方,而另一方为接收方,这个解释推广到任意方都成立,当然,不能够同时按键,因为只是半双工通信而已。

成长的路上,坚持奋斗,加油!

A7105各配置步骤耗时测量结果 - 副本.xls

A7105-BST.zip