这个方法在DX10验证可用,理论上DX101系列也可用。
已在Github同步开源:SLTPLAN/FTDX10_WF: The way to read FTDX_WF without SCU-LAN10
你需要:
1.一个可控制串口设备(STM32、ESP32)【有没有都可以】
2.一个SPI转接设备(比如FT4222HQ的开发板,也可以是ESP32)
工作原理:
第一步:心跳包握手
DX10背后的ACC接口,Pin11(CNT RX)与Pin12(CNT TX)是一对串口,波特率115200。只要电台开机,DX10就会每秒发送一个心跳包,内容是:
alive\0
HEX:
61 6C 69 76 65 00
使用可控制的串口设备,在完整收到上述心跳包的10ms内,通过回复相同的心跳包进行握手。
(经过测试,直接将CNT TX与CNT RX相连也可以)
第二步:SPI数据发送
2-3次握手后,DX10会作为SPI Master发送数据,使用模式1(即CPOL=0, CPHA=1),其中,ACC接口的Pin4为MOSI,输出数据,Pin5为时钟信号(CLK),Pin6为片选信号(CS),频率2MHz。这就需要一个SPI转USB设备(比如FT4222,可以转为USB),或者SPI转网络设备(如ESP32)。
数据格式:
与已知FT710的格式完全相同,单个数据包为4096字节,这些信息来自 wfview :
频道1的瀑布图数据:0-849
频道2的瀑布图数据:850-1699【给DX101系列预留】
频道1的音频FFT数据:1700-1899
频道1的音频波形:1900-2299
频道2的音频FFT数据:2300-2499【给DX101系列预留】
频道2的音频波形:2500-2899【给DX101系列预留】
后续的数据是频率、设定等参数,我就不仔细研究了,因为通过CAT也能获取和控制。
另:我修改了开源的wfview,增加了DX10的设备文件与适合上述情况的FT4222文件,测试可以控制电台与显示频谱。你可以在我的个人网站直接下载:(提醒,前期测试因为不确定协议与主从设备,我依照每个数据包第2955字节处开始产生的acsii字符“dhijgo”作为锚点,它在我这重复出现,我建议使用SPI转接设备的片选信号变化来分割字节。)
下载链接:wfview-release-with-DX10-wf
一些可能的问题与解答:
1.如何分割数据包:一个4096的数据包开始发送时,CS为低电平,发送完成后,CS会变为高电平几毫秒,随后再开始下一轮发送。
2.心跳包要一直维持吗:是的,如果停止回复数据包,会在握手结束后的2-3秒停止传输数据。
3.如果要测试有什么危险点:有的,ACC的Pin8会输出13.8V,内部有一个3.15A的一次性保险丝。如果你像我一样不慎短路烧毁了它,就需要拆机更换了(如果更换建议使用自恢复保险丝)。
4.怎么让程序将SPI的原始数据转换为wfview可用的频谱图:将0~849字节按位取反就是wfview的格式了。
5.我有办法使用SCU-LAN10软件吗:理论上可以搭建一个等效服务器,GITHUB上已有开源的协议可参考:CarrierWaveApp/sculan10-protocol
6.后续我会怎么办:我在做一个ESP32的盒子,配合上位机实现既可以USB有线连接又可以走无线的频谱数据传输。
后续更新:
- ①在wfview里显示频谱【已完成】
- ②编写ESP32转接板【进行中】
- ③制作简易例程【进行中】