当前实现FSK数据通信的芯片种类繁多,发展迅速,在众多方案选择中,要考虑到开发成本,运行稳定性,是否能够实现线路取电等问题,而这些要求也会随着技术发展而不断提高。HC908AP64单片机是摩托罗拉公司推出的一款新型8位低功耗单片机,和低功耗的HT9032D配合,可构建FSK数据通信的新方案。该方案可以用来接收包括主叫识别信息等在内的多种平台信息。下面首先介绍主叫识别信息。
1主叫识别信息
主叫识别信息传送CID(Calling Identity Delivery)是向被叫用户电话提供的一种服务业务。其方法是发端交换机将主叫号码等信息传送给终端交换机,终端交换机再将信息传送给被叫用户终端,如图1所示。
主叫号码信息的信号采用的是连续二进制频移键控(BFSK)方式,数据传输方式为二进制异步串行方式,逻辑1的频率为1200Hz,逻辑o的频率为2200 Hz,传输速率为1200bps。主叫号码信息可以在被叫挂机(On_Hook)或摘机通信状态下传送。挂机状态下传送方法是,终端交换机将主叫信息在第1次振铃和第2次振铃期间传给被叫用户。对此已有相应的协议标准,例如:BeIl 202、CCITT V.23 1200波特率FSK数据传输标准。信息传送的数据格式有2种:单数据消息格式(Single Data MessageFormat)和复合数据消息格式(Multiple Data MessageFormat)。消息帧格式如下:
①信道占用信号由1组300个连续的“0”和“1”交替的位组成,其第1个比特为“0”,最后一个比特为“l”。②标志信号由180个(挂机传送)或80个(摘机传送)逻辑“1”组成。③标志位由0~10个逻辑“1”组成。④对于消息类型、消息长度、消息字、校验字这些数据字,每个数据字之前加1位“0”作为起始位,数据字之后加1位“1”作为结束位(即每个字占10个比特)。数据传送时信道占用信号首先发送,每个数据字中低位在前发送。
两种主要的数据格式消息层的数据信号组成如图2和图3所示。
与单数据格式(图2)一样,复合数据消息格式(图3)由消息头和消息体组成。不同的是,复合数据的消息体由一个或多个小的消息(称为参数消息)组成,参数消息同样具有参数头和参数体。参数头包括参数类型和参数长度。它们均为比特字,参数类型值用来识别后续参数字,参数长度指明参数体中参数字的数目。消息类型0x04对应着单数据格式,0x80对应着复合数据消息格式。取得格式后将接收到消息数据根据相应格式,进行处理[1]。
来电显示在第1声振铃和第2声振铃之间发送,所以一般检测到振铃时开始接收来电显示信息。
2 FSK信息接收硬件方案和构建
实现FSK信号解调的芯片有MC145447、MT8841/8843、HT9030/9031、HT9032C/D等多种。在选取芯片时,从以下几点考虑:
①是否可以实现低功耗。电信终端要求线路供电是一种趋势,所以最好MCU及解调芯片是低功耗芯片且功耗可调。
②对芯片的控制尽量简单,能够节约MCU的口线资源。由于MCU的外围电路很多有键盘扫描电路、显示控制电路、EEPROM的控制电路、时钟控制电路,都需要MCU来控制,所以MCU的口线资源对整个硬件的实现都比较宝贵。虽然口线复用能够在一定程度上解决这种资源紧张,但单口线复用对整个电路的控制带来不确定性。对解调芯片的控制有串口方式和并口方式。采用串口方式更能节约口线资源。
③在电路中有的资源(比如振铃检测电路),要尽量复用,不要采用芯片及电路检测振铃多重控制,避免软件设计的复杂性。
基于以上分析,选择HT9032D做解调芯片。它能实现Bell202 FSK和v.23解调,芯片内部包含电源掉电检测电路、振铃检测电路和载波检测电路。信号输入检测灵敏度高,电源工作电压较宽(3~5.5 V),是进行电话FSK信息解码通信的较好的集成芯片。通过对其的PDWN硬件置“1”,就可工作在低功耗模式(I<1 μA);PDWN硬件置“0”,就工作在正常模式(I<5 mA)。接收“1”的频率范围为(1200±12)Hz,接收“0”的频率范围为(2200±22)Hz,和MCU问的通信方式为1200 bps异步串口方式,解调器的引脚如表1所列。
MCU采用MC68HC908AP64。这种芯片的工作电压范围为4.5~5.5 V和2.7~3.3两种,2 KB的RAM,60 KB的Flash存储器。有48针及42针的LQFP,42针SDIP等三种封装。该芯片本身功耗很低,而且能够运行STOP、WAIT命令,使其能够工作在低功耗监控模式。当外部中断或者时钟中断产生时能够唤醒它。STOP模式和WAIT模式的区别在于,STOP模式中断产生后能够自己马上进入全速模式工作,而WAIT模式必须要在中断中用指令控制该MCU进入全速模式工作。这样只有在需要的时候唤醒系统工作。这种模式切换很好地保证了本方案的功耗最低。对该芯片的编程控制,完全在C环境下进行,极大地减少了程序开发时间。硬件结构如图4所示。
对于从电话线上传输来的FSK信号,信号传送在第1次振铃和第2次振铃之间。不振铃时,三极管Q1截至,Ring为高电平;振铃时,振铃信号经过C1耦合及Z1稳 压,Q1基极高电平,导通,集电极为低电平,唤醒单片机启动判断,检测Ring上的波形是否为25 Hz的信号。是, 为振铃,则启动FSK接收。0.5s后,FSK信号经过C3、 C4、R1、R2的隔直和衰减,输入到FSK接收器HT9032D 的差分输入端TIP和Ring脚,将FSK信号读取解调后从 DOUT脚输出。ASCII码的数字都有奇偶校验位,采用奇 偶校验的方式传送。串行序列,由MC68HC908AP64单片机接收处理,提取出相应的电话FSK信息,送到多功能LCD显示模块,驱动数码显示和EEPROM保存[2]。
3 FSK信息接收通信软件的实现
对于单片机系统,硬件的实现确定了底层软件的实现方法。
3.1 HT9032D工作模式切换
HT9032D工作模式可以控制,一般将它的PDWN置成“1”,使其处在低功耗模式;只有在MCU检测到振铃时,或者打完电话,话机上呼请求平台资费信息时,才开启HT9032D的接收(PDWN置成“0”)。接收完毕或者话费接收失败,平台重发超时,开启HT9032D又被置为低功耗状态。
3.2串口实现接收
由于是多种FSK数据的接收,要做到各种数据接收和各个模块之间的复用,所以将FSK接收分成图5所示物理层、数据链路层和应用层,每个层之间是透明的。这样结构简单,便于设计和维护。
(1)物理层
因为在单片机系统中,MCU一般只有一个硬件串口,且往往被用来作程序升级等功能,所以串口资源不足,而且配置1200 bps的波特率方式接收FSK解调芯片的DOUT的数据,受到晶振的频率和MCU的功能的限制,本方案采用在一般的口线上实现软串口方式接收HT9032D数据。由于DOUT数据输出方式为1200 bps异步串口方式,即每个bit数据的时间为1/1200=μs,本方案采用278μs的中断方式对HT9032D数据输出脚DOUT进行不断扫描,,也就实现了每个bit的三点采样。通过三点采样的方式确定接收的bit,极大地提高了软件对接收数据的判断正确度。取样示意图如图6所示。
(2)链路层
链路层主要是为了同步处理及数据类型判断。分析几种FSK数据的特点发现,它们的结构基本都由以下部分构成[3]:
信道占用信号和标志信号构成同步信号,所以在接收数据前同步是关键。
链路层的软件流程如图7所示。
同步的过程分五步:第一步接收到“0”和“1”的交替位;第二步计数并判断信道占用信号是否成功接收,成功接收则进入第三步接收标志信号;第三步接收到连续的“1”的交替位进人第四步标志信号计数;第四步计数并接收判断标志信号是否成功接收,成功接收则进入第五步接收数据信号;第五步接收消息层数据,根据不同的数据消息类型取出相应的消息层数据信号。由于这五个步骤都是在278 μs中断模块中实现的,保证了每次中断只会运行其中的一个步骤,所以加快了中断的运行速度,保证了程序的稳定性。
(3)应用层
将链路层分离出来的消息层数据信号,按照单复数来电显示的格式分拣。分拣成功后发送到显示模块显示并存储到EEPROM,为来电显示查询提供帮助。
3.3在软件设计时应该注意的几个问题
①在接收平台的资费信息时,一定要注意平台和终端的协议不一定和实际的同步码的个数相符合,所以一定要在不同平台的测试过程中,通过示渡器测量DOUT输出的同步码的长度。
②由于有一些和1200 Hz和2200 Hz相近的信号容易被识别成同步信号,比如回铃音信号,造成数据误判断,所以在链路层中一定要将该信号滤除掉,以免影响其他有用信号的接收。
③由于软串口接收数据的物理层是用定时中断的方式工作的,当定时中断被别的中断中断时,容易造成数据读错,所以在接收FSK数据时,一定要关闭所有其他
中断。
④278 μs中断的启动必须是先检测到铃声后再进行;同时,接收完数据后要停止该中断。这样可以有效地减少功耗。
结 语
HT9032D与MC68Hc908AP64结合的方案,从软硬件两方面综合考虑了低功耗和接收准确度的问题,可以很方便地实现电话FSK信息的解码、接收通信,实现用电话网进行用户远程数据结算等功能。本方案已在一款新型智能公话中使用,并和中兴、华为、贝尔等智能网平台进行数据通信测试,运行效果良好。