各位高手帮忙看看,特别是搞过TNC固件的,这APRS用的是不是这样子的:
另外想用agwtracker连aprs.hellocq.net的服务器,地址应该怎么填?
我用"aprs.….net:14580"从来没连成功过,可aprs.hellocq.net上突然阴差阳错地出现了我的呼号,
还位于经纬度都在0的那个点上。。。怎么回事
++++++++++++++++++++++++++++++++++++++++++++
1200 Baud Packet Radio Details
1200波特率分组无线电细节
教训
当我开始着手于我的OpenTracker工程时,我发现在1200分包无线电上缺少底层的文档。我在项目中获得很多教训,我准备在这儿写一个总结。如果你想跳开这些,可以检查我的Packet Shooter固件。
物理层
1200波特分组数据使用Bell 202 AFSK。AFSK是音频频移键控,意味着信号使用两个音频音调调制。APRS主要使用1200baud Bell 202 音频频移键控。信号使用两个音调调制,与普通的FSK不同的是,在FSK中是无线电载波自己的频率在移动。使用FSK需要到电台鉴频器的直接直流耦合,而AFSK的优点时通过普通的音频路径工作,这使它很容易和为语音通信设计的无线电设备兼容。
音频音调
Bell202 使用 1200Hz的传号 和 2200的空号。目前绝大多数分包文档都是这样说的。然而不幸的是,这种说法有点误导人。
分包数据采用NRZI反相非归零编码,意味着0被编码为音调的变化,而1编码为不变的音调。
另外值得注意的是音调必须是连续相位的。当你从一个音调变化到另一个的时候,相位不能发生跳变。例如,当你发送1200Hz音调,而波形的顶峰的时候切换到2200Hz,此时波形还应该是顶峰。它不应该回到0相位,或者其他相位点。这使得不可以使用简单基本的音频音调切换来产生正确的信号。(Basic Stamp's)
比特顺序
字节低位在前发送。(LSB在前)
比特填充
由于1被编码为不变的音调,所以一长串1会被编码为持久不变的信号,这回导致接收机丢失同步。位填充避免了这一问题。
除了下文将提到的FLAG序列,每5个1后,在第5个1后插入一个0。这个填充的0必须被接收机移去。
警告:在AX.25规则书2.2.6段中对位填充的描述是错误的!0被插在第5个1后面,而非第一个1。
数据层
AX.25协议定义了数据格式。AX.25基于高级数据链控制协议HDLC。帧起始和结尾都是二进制序列01111110,即HDLC的FLAG。这一序列不经过比特填充,这是在序列中唯一的六连1。AX.25协议有成熟的文档,这里我就不多讲了。
帧校验序列
在AX.25格式中一个值得注意的细节是帧校验序列FSC。这使一个2字节的校验和,添加在每一帧的结尾。他使用CRC-CCITT多项式产生,并低字节在前发送。
CRC-CCITT算法有大量的参考代码。但我需要的,遇到麻烦的是,逐位计算FCS的方法,而非一次整个字节。算法如下:
16位FCS初始化为0xFFFF。每个数据位发送时,右移FCS值一位。如果移出的这一位与发送位不同,则将FCS值与0x8408异或。最后一位之后,将FCS值对1取补吗(取反),然后将它低位在前发送出去。
参考
AX.25 Specification, Version 2.2
HDLC Technical Overview
CRC-CCITT - 16-bit
scott@n1vg.net