源码我放到Github上面了,删除了一些无用的代码,加了一些注释,进行了格式化。
代码设计上面没有使用实时操作系统
里面包含两套
里面的函数
引入的头文件
里面是大量的定时器和中断
HAL层是封装了大量的机体函数
看这个量就知道不简单了
我们都知道I6X是使用的A7105这个芯片,这个文件就是控制射频芯片的文件
芯片是使用的SPI,以及二代的协议这里也有了
A7105是一枚使用于2.4GHz ISM频段低成本无线收发射频集成电路,内含高灵敏度的接收电路(250kbps@-99dBm)和高效率的发射电路,适合于通信距离在30m以内的用场场合。A7105 具有可以编程的工作速率, 最高为500Kbps。在数字接口部份,提供4pin(SPI)或3pin 接口方式, 在RF 数据的处理有两种模式可供选择 : FIFO(先入先出缓冲器,利用RF 内部的memory 先储存要发射和接收的数据), Direct(直接发射及接收)。在FIFO 模式下, 也支援CRC(CRC16), FEC(约可增加灵敏度1~2dbm),data whitening(也即数据加密), 曼切斯特编和解碼。A7105 内建接收信号强度指示RSSI, 温度传感器, 以侦测环境对RF IC 的影响, 同时内含一路 ADC 侦测使用电压。无线唤醒机制, 从而延长电池使用寿命。
这里是功率的调整
频道的极值
看她这个写法,有16个频道可以放出去
这个是通道的映射,有很多
4x4 16种模式(我好像算错了)
这里是写了协议的遥测给你,其实就是短暂的发一个小包,这个信息要传递出去,所以这里是extern。
16个频道也可以放出去
协议的校验
这个估计是上面已经定义了,这里是被注释的
协议的枚举,就是支持的协议
芯片的状态,状态机的时候会用
这个怎么说,也是协议的定义
自动对频的枚举
接下来去看具体的实现
初始的一堆
因为我对这个芯片的具体细节还没有看完,这段就是凭借经验了。
看这里应该都是要初始化我们的芯片,都是对寄存器操作的
接着就是执行这个
寄存器都写到枚举里面
这个函数被使用的太多,一时之间还没有被跳转,我在这里找到了
第一个是位置,第二个是数据
这里是封装了一下宏函数
在内部看是这样
这个FPTC外设是啥?
查了一下,是NXP的芯片
标准库。CMSIC的好处就是这个学习不用换个芯片就得学一次
原来是NXP的芯片
和STM32 大同小异得
关于这个SPI得函数,一次可以读到两个
这里终于出现SPI了,一次出现好多的定义
看头文件
是STM32的
这个是SPI函数发送一个小数据包
这个NXP的不对,应该是STM的方案,这里把NXP的库,
这个是读一个寄存器得值
这个就是先发现一个命令,给我康康~接着返回一个命令,给你康康。
这里就是把这个我也看不懂的控制数值,使用数组写到芯片里面
就这些
画图看看
救命,为啥给芯片里面写入这种奇怪的信息???
接下来没有啥说的(关键我不知道),就是对芯片的一个校准的过程,每一次的重启都有校准的过程。
芯片手册说的
最后是功率的设置
一开始传入是,什么叫bind功率,啥???
这个SPI的库我是看不懂了。
所谓去看了看数据手册
我个人是觉得是,上面发的那个数组
就是FlySky的协议
哟,还有震荡电路
最后给个原理图
我们先看看这个AFHDS2A的协议
这不要脸的爬我的文章
投诉都没有地方
怎么搜都是我。。。我要是有这么高的排名博客就好了
总之是看不见一个靠谱的解说协议内容的地方。
先找到发包和收包的大小是37字节
从上面引入协议的变量
不知道这里是不是跳频的协议代码
通道之间是5间隔跳的,然后具体通道是按照现在启用的通道数算的
FlySky装逼的跳频协议,就这?
我懂拉
众所周知还有遥测的功能,就是发送一个小的短报文
报文的数据包为40
现在这个函数是传感器的更新函数
两个发包的方法
通过分支选择在装载内容,这段其实值得细细读,但是下次一定
在对频功能里面值得看这个,就是在16个通道里面不停的寻找
我这段代码就有点看不懂,不知道为什么这个4号就这么特殊。
如果有人知道可以和我讨论一下
我觉得这里不可以不求甚解了,我停下来再研究一下代码。
有人想改装遥控器,可以看这里
具体的定义
- 具有 SBUS、IBUS 和扩展 SBUS16、IBUS16 的 AFHDS2A - 16 通道模式
- PPM 输入/输出
- 带有 ExpressLRS 和 Crossfire 模块的 CRSF:
- CRSFshot
- 高达 1.8M 的兆波特率
- ExpressLRS V2 配置(ELRSV2.lua 端口)
St-Link的连接处
基于上面的源码制作的OpenTX固件。
ErFly6 - 为无线电 FlySky FS-i6、FS-i6x 系列移植 er9X 的新(好被遗忘的旧)项目。构建固件 - 通过 J-Link(克隆)或 ST-Link(用于 FS-i6X)的 Segger Embedded Sudio Flash 固件。要构建固件安装
代码语言:javascript复制https://www.segger.com/downloads/embedded-studio/
在文件菜单中选择打开解决方案,然后从放置它的文件夹中选择 FSI6.emProject。
选择适合你的遥控器的 Active Project - FSI6 或 FSI6X。构建项目。如果构建成功的闪存固件。
RF 模块 A7105 仅支持 AFDHS 2A 协议。现在不支持 AFDHS 协议。支持教练模式(PPM 输入和 PPM 输出)。
代码语言:javascript复制https://www.flyskytech.com/products_detail/37.html
代码语言:javascript复制https://www.multi-module.org/using-the-module/protocol-details/flysky-afhds-2a-rx
代码语言:javascript复制https://github.com/OpenI6X/opentx
代码语言:javascript复制https://bitbucket.org/KotelloRC/
代码语言:javascript复制https://www.segger.com/downloads/embedded-studio/
代码语言:javascript复制https://bitbucket.org/KotelloRC/erfly6/src/master/
代码语言:javascript复制http://www.zymcu.com/application/a7105.htm
代码语言:javascript复制http://files.banggood.com/A7105 Datasheet v1.4.pdf
代码语言:javascript复制https://datasheet.lcsc.com/lcsc/1810010110_AMICCOM-Elec-A7105_C126376.pdf
代码语言:javascript复制https://item.szlcsc.com/526547.html