s19文件格式详解

1.概述

为了在不同的计算机平台之间传输程序代码和数据,摩托罗拉将程序和数据文件以一种可打印的格式(ASCII格式)编码成s格式文件。s格式文件是 Freescale推荐使用的标准文件传送格式。编译完成之后,Freescale CodeWarrior编译器将在bin文件夹下自动生成“*.abs.s19”文件,这个文件包含最终下载带单片机中的所有内容。

2. 格式定义及含义

S格式文件中的每一行称为一个S记录,每个S记录由记录类型、记录长度、存储地址、代码/数据、校验和5个部分组成。

每字节数据被编码成2个16进制字符,第一个字符代表数据的高四位,第二个字符代表数据的低4位。

5个部分具体内容如下:

记录类型
记录长度
存储地址
代码/数据
校验和

记录类型:2个字符(即1个字节),用来描述记录的类型。记录供定义了8种类型:

S0: S格式文件的第一个记录,表示文件名(含路径),存储地址部分没有使用,以0000置位。此记录表示记录的开始,无需下载到MCU。

S1:  地址为2字节(4个字符)的记录。

S2:  地址为3字节的记录。

S3:  地址为4字节的记录。

S5:  标记本文件的S1、S2、S3记录的个数(此记录不是一个S文件所必须的)。

S7:  地为4字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。

S8:  地为3字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。

S9:  地为2字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。

记录长度:  2个字符(即1个字节),显示在记录中剩余的字节数。即

记录长度 = 存储地址字节数 + 代码/数据字节数 + 校验和字节数

存储地址:  2或3或4个字节(由记录类型决定),用来表示代码/数据应该装载的起始地址。

代码/数据:  0-64字符(即0-32字节),表示需要下载到MCU中的数据。

校验和:     2个字符(即1字节),校验数据,计算方法:

校验和  =  0Xff – (记录长度 + 存储地址 + 代码/数据)

(注意,为校验和不是字符的校验和,而是实际二进制数的校验和)

3. 实例:

S01F0000443A5C50726F6A6563745F335C62696E5C50726F6A6563742E61627371

S123C000CF2100C6055B134A800BFE4A8000FE0000C015C03100000000000000
0000000092

S218FE8020F2FEC013EC31270BED31180A30700434F920F10A0B

S9030000FC

说明;

第一行:S0,表示S19文件格式开始;1F为剩余字节数;0000无用;443A5C50726F6A6563745F335C62696E5C50726F6A6563742E616273

为D:Project_3binProject_3.abs.的ASCII码;71为校验和.

第二行: S1,表示本条记录存储地址长度为2字节;23(注意为16进制)剩余字

节数,C000,表示起始地址,92表示校验和。即,本行表示将

CF2100C6055B134A800BFE4A8000FE0000C015C0310000000000000000000000依次下载到从地址C000开始的一段连续地址中。

第三行: S2,表示本条记录存储地址长度为3字节,18(16进制数)表示剩余字节数,FE8020表示起始地址,0B为校验和。

校验和的计算:以S2记录为例,

校验和 = 0xFF – (0xFE + 0×80 + 0×20 + 0Xf2 + … + 0x0A);

另记:在用Freescale CodeWarrior调试FLASH擦除和写入时需注意以下几点:

1.      已写入过的FLASH地址需要在擦除后才能再次写入。

2.      在内存监视窗口有时无法看到是否正确写入和擦除,可用指针从地址处读出数据检查是否正确擦除及写入。

3.      在BDM模式下,用自己写的FLASH下载代码通过串口导入s19文件后,将导致芯片锁定,若不解锁(Unsecure),无法再次通过BDM或者串口下载s19文件。但当芯片脱离BDM独立运行时未发现此问题。

注: 软件版本;CW for S12(X) 5.0,芯片型号:MC9S12XDP512

SSH翻墙飞一般的感觉

突然来了点灵感,想去看看那些撞墙的网站,譬如twitter和blogspot之类的。但是用Tor翻墙的龟速真是让我难以忍受,自由门速度虽然还可以但是也常常会断。索性试试SSH,嘿嘿,速度不错而且相当稳定。还真对得起这一年30元,30元买了个2G的国外空间用来放博客还可以用SSH来翻墙,真是太值了。具体怎用SSH翻墙,网上的教程不胜枚举,我是用PUTTY+PLINK来做的,很是方便,那感觉——飞一般的。

Incoming search terms:

  • 为什么要对产品做电磁兼容设计?

几种PWM控制方法

引言
采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。PWM控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。
PWM控制的基本原理很早就已经提出,但是受电力电子器件发展水平的制约,在上世纪80年代以前一直未能实现。直到进入上世纪80年代,随着全控型电力电子器件的出现和迅速发展,PWM控制技术才真正得到应用。随着电力电子技术、微电子技术和自动控制技术的发展以及各种新的理论方法,如现代控制理论、非线性系统控制思想的应用,PWM控制技术获得了空前的发展。到目前为止,已出现了多种PWM控制技术,根据PWM控制技术的特点,到目前为止主要有以下8类方法。
1 相电压控制PWM
1.1 等脉宽PWM法[1]

VVVF(Variable Voltage Variable Frequency)装置在早期是采用PAM(Pulse Amplitude Modulation)控制技术来实现的,其逆变器部分只能输出频率可调的方波电压而不能调压。等脉宽PWM法正是为了克服PAM法的这个缺点发展而来的,是PWM法中最为简单的一种。它是把每一脉冲的宽度均相等的脉冲列作为PWM波,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。相对于PAM法,该方法的优点是简化了电路结构,提高了输入端的功率因数,但同时也存在输出电压中除基波外,还包含较大的谐波分量。
1.2 随机PWM
在上世纪70年代开始至上世纪80年代初,由于当时大功率晶体管主要为双极性达林顿三极管,载波频率一般不超过5kHz,电机绕组的电磁噪音及谐波造成的振动引起了人们的关注。为求得改善,随机PWM方法应运而生。其原理是随机改变开关频率使电机电磁噪音近似为限带白噪声(在线性频率坐标系中,各频率能量分布是均匀的),尽管噪音的总分贝数未变,但以固定开关频率为特征的有色噪音强度大大削弱。正因为如此,即使在IGBT已被广泛应用的今天,对于载波频率必须限制在较低频率的场合,随机PWM仍然有其特殊的价值;另一方面则说明了消除机械和电磁噪音的最佳方法不是盲目地提高工作频率,随机PWM技术正是提供了一个分析、解决这种问题的全新思路。
1.3 SPWM法
SPWM(Sinusoidal PWM)法是一种比较成熟的、目前使用较广泛的PWM法。前面提到的采样控制理论中的一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。SPWM法就是以该结论为理论基础,用脉冲宽度按正弦规律变化而和正弦波等效的PWM波形即SPWM波形控制逆变电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,通过改变调制波的频率和幅值则可调节逆变电路输出电压的频率和幅值。该方法的实现有以下几种方案。
1.3.1 等面积法
该方案实际上就是SPWM法原理的直接阐释,用同样数量的等幅而不等宽的矩形脉冲序列代替正弦波,然后计算各脉冲的宽度和间隔,并把这些数据存于微机中,通过查表的方式生成PWM信号控制开关器件的通断,以达到预期的目的。由于此方法是以SPWM控制的基本原理为出发点,可以准确地计算出各开关器件的通断时刻,其所得的的波形很接近正弦波,但其存在计算繁琐,数据占用内存大,不能实时控制的缺点。
1.3.2 硬件调制法
硬件调制法是为解决等面积法计算繁琐的缺点而提出的,其原理就是把所希望的波形作为调制信号,把接受调制的信号作为载波,通过对载波的调制得到所期望的PWM波形。通常采用等腰三角波作为载波,当调制信号波为正弦波时,所得到的就是SPWM波形。其实现方法简单,可以用模拟电路构成三角波载波和正弦调制波发生电路,用比较器来确定它们的交点,在交点时刻对开关器件的通断进行控制,就可以生成SPWM波。但是,这种模拟电路结构复杂,难以实现精确的控制。
1.3.3 软件生成法
由于微机技术的发展使得用软件生成SPWM波形变得比较容易,因此,软件生成法也就应运而生。软件生成法其实就是用软件来实现调制的方法,其有两种基本算法,即自然采样法和规则采样法。
1.3.3.1 自然采样法[2]
以正弦波为调制波,等腰三角波为载波进行比较,在两个波形的自然交点时刻控制开关器件的通断,这就是自然采样法。其优点是所得SPWM波形最接近正弦波,但由于三角波与正弦波交点有任意性,脉冲中心在一个周期内不等距,从而脉宽表达式是一个超越方程,计算繁琐,难以实时控制。
1.3.3.2 规则采样法[3]
规则采样法是一种应用较广的工程实用方法,一般采用三角波作为载波。其原理就是用三角波对正弦波进行采样得到阶梯波,再以阶梯波与三角波的交点时刻控制开关器件的通断,从而实现SPWM法。当三角波只在其顶点(或底点)位置对正弦波进行采样时,由阶梯波与三角波的交点所确定的脉宽,在一个载波周期(即采样周期)内的位置是对称的,这种方法称为对称规则采样。当三角波既在其顶点又在底点时刻对正弦波进行采样时,由阶梯波与三角波的交点所确定的脉宽,在一个载波周期(此时为采样周期的两倍)内的位置一般并不对称,这种方法称为非对称规则采样。
规则采样法是对自然采样法的改进,其主要优点就是是计算简单,便于在线实时运算,其中非对称规则采样法因阶数多而更接近正弦。其缺点是直流电压利用率较低,线性控制范围较小。
以上两种方法均只适用于同步调制方式中。
1.3.4 低次谐波消去法[2]
低次谐波消去法是以消去PWM波形中某些主要的低次谐波为目的的方法。其原理是对输出电压波形按傅氏级数展开,表示为u(ωt)=ansinnωt,首先确定基波分量a1的值,再令两个不同的an=0,就可以建立三个方程,联立求解得a1,a2及a3,这样就可以消去两个频率的谐波。
该方法虽然可以很好地消除所指定的低次谐波,但是,剩余未消去的较低次谐波的幅值可能会相当大,而且同样存在计算复杂的缺点。该方法同样只适用于同步调制方式中。
1.4 梯形波与三角波比较法[2]
前面所介绍的各种方法主要是以输出波形尽量接近正弦波为目的,从而忽视了直流电压的利用率,如SPWM法,其直流电压利用率仅为86.6%。因此,为了提高直流电压利用率,提出了一种新的方法–梯形波与三角波比较法。该方法是采用梯形波作为调制信号,三角波为载波,且使两波幅值相等,以两波的交点时刻控制开关器件的通断实现PWM控制。
由于当梯形波幅值和三角波幅值相等时,其所含的基波分量幅值已超过了三角波幅值,从而可以有效地提高直流电压利用率。但由于梯形波本身含有低次谐波,所以输出波形中含有5次、7次等低次谐波。
2 线电压控制PWM
前面所介绍的各种PWM控制方法用于三相逆变电路时,都是对三相输出相电压分别进行控制的,使其输出接近正弦波,但是,对于像三相异步电动机这样的三相无中线对称负载,逆变器输出不必追求相电压接近正弦,而可着眼于使线电压趋于正弦。因此,提出了线电压控制PWM,主要有以下两种方法。
2.1 马鞍形波与三角波比较法
马鞍形波与三角波比较法也就是谐波注入PWM方式(HIPWM),其原理是在正弦波中加入一定比例的三次谐波,调制信号便呈现出马鞍形,而且幅值明显降低,于是在调制信号的幅值不超过载波幅值的情况下,可以使基波幅值超过三角波幅值,提高了直流电压利用率。在三相无中线系统中,由于三次谐波电流无通路,所以三个线电压和线电流中均不含三次谐波[4]。
除了可以注入三次谐波以外,还可以注入其他3倍频于正弦波信号的其他波形,这些信号都不会影响线电压。这是因为,经过PWM调制后逆变电路输出的相电压也必然包含相应的3倍频于正弦波信号的谐波,但在合成线电压时,各相电压中的这些谐波将互相抵消,从而使线电压仍为正弦波。
2.2 单元脉宽调制法[5]
因为,三相对称线电压有Uuv+Uvw+Uwu=0的关系,所以,某一线电压任何时刻都等于另外两个线电压负值之和。现在把一个周期等分为6个区间,每区间60°,对于某一线电压例如Uuv,半个周期两边60°区间用Uuv本身表示,中间60°区间用-(Uvw+Uwu)表示,当将Uvw和Uwu作同样处理时,就可以得到三相线电压波形只有半周内两边60°区间的两种波形形状,并且有正有负。把这样的电压波形作为脉宽调制的参考信号,载波仍用三角波,并把各区间的曲线用直线近似(实践表明,这样做引起的误差不大,完全可行),就可以得到线电压的脉冲波形,该波形是完全对称,且规律性很强,负半周是正半周相应脉冲列的反相,因此,只要半个周期两边60°区间的脉冲列一经确定,线电压的调制脉冲波形就唯一地确定了。这个脉冲并不是开关器件的驱动脉冲信号,但由于已知三相线电压的脉冲工作模式,就可以确定开关器件的驱动脉冲信号了。
该方法不仅能抑制较多的低次谐波,还可减小开关损耗和加宽线性控制区,同时还能带来用微机控制的方便,但该方法只适用于异步电动机,应用范围较小。
3 电流控制PWM
电流控制PWM的基本思想是把希望输出的电流波形作为指令信号,把实际的电流波形作为反馈信号,通过两者瞬时值的比较来决定各开关器件的通断,使实际输出随指令信号的改变而改变。其实现方案主要有以下3种。
3.1 滞环比较法[4]
这是一种带反馈的PWM控制方式,即每相电流反馈回来与电流给定值经滞环比较器,得出相应桥臂开关器件的开关状态,使得实际电流跟踪给定电流的变化。该方法的优点是电路简单,动态性能好,输出电压不含特定频率的谐波分量。其缺点是开关频率不固定造成较为严重的噪音,和其他方法相比,在同一开关频率下输出电流中所含的谐波较多。
3.2 三角波比较法[2]
该方法与SPWM法中的三角波比较方式不同,这里是把指令电流与实际输出电流进行比较,求出偏差电流,通过放大器放大后再和三角波进行比较,产生PWM波。此时开关频率一定,因而克服了滞环比较法频率不固定的缺点。但是,这种方式电流响应不如滞环比较法快。
3.3 预测电流控制法[6]
预测电流控制是在每个调节周期开始时,根据实际电流误差,负载参数及其它负载变量,来预测电流误差矢量趋势,因此,下一个调节周期由PWM产生的电压矢量必将减小所预测的误差。该方法的优点是,若给调节器除误差外更多的信息,则可获得比较快速、准确的响应。目前,这类调节器的局限性是响应速度及过程模型系数参数的准确性。
4 空间电压矢量控制PWM[7]
空间电压矢量控制PWM(SVPWM)也叫磁通正弦PWM法。它以三相波形整体生成效果为前提,以逼近电机气隙的理想圆形旋转磁场轨迹为目的,用逆变器不同的开关模式所产生的实际磁通去逼近基准圆磁通,由它们的比较结果决定逆变器的开关,形成PWM波形。此法从电动机的角度出发,把逆变器和电机看作一个整体,以内切多边形逼近圆的方式进行控制,使电机获得幅值恒定的圆形磁场(正弦磁通)。
具体方法又分为磁通开环式和磁通闭环式。磁通开环法用两个非零矢量和一个零矢量合成一个等效的电压矢量,若采样时间足够小,可合成任意电压矢量。此法输出电压比正弦波调制时提高15%,谐波电流有效值之和接近最小。磁通闭环式引入磁通反馈,控制磁通的大小和变化的速度。在比较估算磁通和给定磁通后,根据误差决定产生下一个电压矢量,形成PWM波形。这种方法克服了磁通开环法的不足,解决了电机低速时,定子电阻影响大的问题,减小了电机的脉动和噪音。但由于未引入转矩的调节,系统性能没有得到根本性的改善。
5 矢量控制PWM[8]
矢量控制也称磁场定向控制,其原理是将异步电动机在三相坐标系下的定子电流Ia,Ib及Ic,通过三相/二相变换,等效成两相静止坐标系下的交流电流Ia1及Ib1,再通过按转子磁场定向旋转变换,等效成同步旋转坐标系下的直流电流Im1及It1(Im1相当于直流电动机的励磁电流;It1相当于与转矩成正比的电枢电流),然后模仿对直流电动机的控制方法,实现对交流电动机的控制。其实质是将交流电动机等效为直流电动机,分别对速度、磁场两个分量进行独立控制。通过控制转子磁链,然后分解定子电流而获得转矩和磁场两个分量,经坐标变换,实现正交或解耦控制。
但是,由于转子磁链难以准确观测,以及矢量变换的复杂性,使得实际控制效果往往难以达到理论分析的效果,这是矢量控制技术在实践上的不足。此外.它必须直接或间接地得到转子磁链在空间上的位置才能实现定子电流解耦控制,在这种矢量控制系统中需要配置转子位置或速度传感器,这显然给许多应用场合带来不便。
6 直接转矩控制PWM[8]
1985年德国鲁尔大学Depenbrock教授首先提出直接转矩控制理论(Direct Torque Control简称DTC)。直接转矩控制与矢量控制不同,它不是通过控制电流、磁链等量来间接控制转矩,而是把转矩直接作为被控量来控制,它也不需要解耦电机模型,而是在静止的坐标系中计算电机磁通和转矩的实际值,然后,经磁链和转矩的Band-Band控制产生PWM信号对逆变器的开关状态进行最佳控制,从而在很大程度上解决了上述矢量控制的不足,能方便地实现无速度传感器化,有很快的转矩响应速度和很高的速度及转矩控制精度,并以新颖的控制思想、简洁明了的系统结构、优良的动静态性能得到了迅速发展。
但直接转矩控制也存在缺点,如逆变器开关频率的提高有限制。
7 非线性控制PWM
单周控制法[7]又称积分复位控制(Integration Reset Control,简称IRC),是一种新型非线性控制技术,其基本思想是控制开关占空比,在每个周期使开关变量的平均值与控制参考电压相等或成一定比例。该技术同时具有调制和控制的双重性,通过复位开关、积分器、触发电路、比较器达到跟踪指令信号的目的。单周控制器由控制器、比较器、积分器及时钟组成,其中控制器可以是RS触发器,其控制原理如图1所示。图中K可以是任何物理开关,也可是其它可转化为开关变量形式的抽象信号。
单周控制在控制电路中不需要误差综合,它能在一个周期内自动消除稳态、瞬态误差,使前一周期的误差不会带到下一周期。虽然硬件电路较复杂,但其克服了传统的PWM控制方法的不足,适用于各种脉宽调制软开关逆变器,具有反应快、开关频率恒定、鲁棒性强等优点,此外,单周控制还能优化系统响应、减小畸变和抑制电源干扰,是一种很有前途的控制方法。
8 谐振软开关PWM
传统的PWM逆变电路中,电力电子开关器件硬开关的工作方式,大的开关电压电流应力以及高的du/dt和di/dt限制了开关器件工作频率的提高,而高频化是电力电子主要发展趋势之一,它能使变换器体积减小、重量减轻、成本下降、性能提高,特别当开关频率在18kHz以上时,噪声将已超过人类听觉范围,使无噪声传动系统成为可能。
谐振软开关PWM的基本思想是在常规PWM变换器拓扑的基础上,附加一个谐振网络,谐振网络一般由谐振电感、谐振电容和功率开关组成。开关转换时,谐振网络工作使电力电子器件在开关点上实现软开关过程,谐振过程极短,基本不影响PWM技术的实现。从而既保持了PWM技术的特点,又实现了软开关技术。但由于谐振网络在电路中的存在必然会产生谐振损耗,并使电路受固有问题的影响,从而限制了该方法的应用。

lpc2138捕获应用实践

由于要在电子显示屏上增加遥控功能,所以涉及到红外遥控的解码问题,红外接收采用的是TFM 5380,红外接收头输出脚接10k电阻上拉到+5V,用100P电容接到GND。用示波器观察输出信号,效果很好基本上红外编码能够吻合了。红外接收头的输出接到LPC2318的22脚,即P0.2/CAP0.0,此脚可用作定时器0的捕获输入,这样看来硬件估计是没有什么问题的啦。

程序开始将该端口选择为捕获输入,即
PINSEL0 = (PINSEL0 & ~(0×20)) | 0×20;

接着对设置定时器0中断
IRQEnable();
VICIntSelect = 0×00000000;
VICVectCntl0 = 0×20 | 0×04;
VICVectAddr0 = (uint32)Timer0_CapInt;
VICIntEnable = 1 << 4;

随后对定时器0进行初始化,
T0PR = 99; //对Fpclk 100分频
T0CCR = 0×05; //上升沿触发,允许中断
T0TC = 0; //定时器0清零
T0TCR = 1; //启用定时器0

这样对其进行初始化应该不会有任何问题的。在中断响应程序中根据T0TC的值来判断同步位和code中的0,1。同时对T0TC进行清零并清除中断标志。

进入调试状态后在中断响应程序内设置断点,发现程序跑起来后不断地产生中断,此时并未用遥控器进行操作。回头检查程序并未发现什么问题,又将例程拿来看看做了一下比较,除了所有的定时器和端口不一样外并无什么不同,因此排除程序的问题。再来看看硬件吧,将示波器接到LPC2318的22脚观察波形也没有看到任何边沿的跳变。问题出来了,貌似软件和硬件都没有问题啊,什么原因呢?通过不停的捣腾最后发现是多接了一个上拉电阻的原因,原来是CAP0.0脚上接了两个上拉电阻其中有一个是原先用作I2C时加的上拉,原本是想采用外部中断来接红外的,后来I2C没有上,觉得还用用捕获来做红外方便些,因此弄根线飞了过来。拿烙铁把电阻弄下来后定时器0的捕获中断便正常了,呵呵。

Incoming search terms:

  • LPC2318
  • LPC2138

电子显示屏

在此产品开发过程中硬件参与的比较少,我主要负责编写软件,产品功能有:

  1. 通过GSM短信方式接收信息(每次接收字符不超过210字),通过LED显示屏将信息以文字的方式显示出来,文字以从右至左的滚动方式展示整条信息的全部内容。同时以语音方式将信息播报出来。
  2. 通过GPRS方式接收信息(每次接收字节不超过500字节),通过LED显示屏将信息以文字的方式显示出来,文字以从右至左的滚动方式展示整条信息的全部内容。同时以语音方式将信息播报出来。
  3. 显示屏左下方带有预警级别指示灯,用户可在所发布信息的开头加入指定的特殊字段来指定该信息的预警级别,信息显示屏在接收到信息后解析特殊字段并通过预警级别指示灯指示该信息预警级别。
  4. 通过电话方式呼叫显示屏,显示屏可对预设的主叫号码进行自动应答,电话接通后,显示屏可将主叫方的话语通过扬声器广播出来。
  5. 显示屏在右下方显示当前时间、日期。默认显示为当前时间,用户可通过遥控器切换到日期方式显示。
  6. 显示屏带有红外遥控功能,用户可通遥控器浏览信息,切换时间和日期的显示,进行日期和时间的设定等。
  7. 显示屏预留1路RS232通讯接口和1路RS485通讯接口,方便日后使用这两路通讯接口和气象站的一些设备进行通讯。
  8. 显示屏带有2路AC220V可控输出,可外接功放等设备,可通过程序控制设备的电源,从而实现节能环保的目的。

NXP ARM7内置看门狗使用注意

先看一下zlg的喂狗程序

void InitWdt(void)
{
    WDTC = 0x5F0000;      // 设置WDTC,喂狗重装值
    WDMOD = 0×03;          // 设置并启动WDT
    RstWdt();                  // 进行喂狗操作
}

void  RstWdt(void)
{
    WDFEED = 0xAA;
    WDFEED = 0×55;
}

表面上看来这段程序没有什么问题,如果你不用中断的话,或者是狗的值设置的比较长而中断出现的频率较低时也不容出现什么问题,但是隐患还是依然存在的。

在周立功的<>里关于看门狗喂狗寄存器WDFEED有一句话:   ” 向WDFEED寄存器写入0XAA的下一个操作应当是向WDFEED寄存器写入0X55″。这就说喂狗时向WDFEED写入0xAA和0×55时中间是不能有任何间隔的,也就是在此期间不能被中断。如果我们的程序里用到中断就有可能导致喂狗失败从而导致系统复位。因此为了避免被中断,我们可以在喂狗是关闭中断,在喂狗结束时再开启中断。程序改写如下

void  RstWdt(void)
{
    IRQDisable();
    WDFEED = 0xAA;
    WDFEED = 0×55;
    IRQEnable();
}

这就好比在os中的临界段要关闭中断一样,在不应该被打断的地方先关中断处理完了再开中断。

Incoming search terms:

  • ARM7
  • NXP
  • ARM7 WDTC
  • ARM7 看门狗

GSM短信PDU编码协议

接下来的一段时间要做一个基于GTM900的小系统,所以要了解AT命令和PDU编码协议通过在网上搜索得到一些编码协议的东西,便顺手摘录如下:

目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8- bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A B C D E F G H I J K L M十三项组成。


A:短信息中心地址长度,2位十六进制数(1字节)。

B:短信息中心号码类型,2位十六进制数。

C:短信息中心号码,B+C的长度将由A中的数据决定。

D:文件头字节,2位十六进制数。

E:信息类型,2位十六进制数。

F:被叫号码长度,2位十六进制数。

G:被叫号码类型,2位十六进制数,取值同B。

H:被叫号码,长度由F中的数据决定。

I:协议标识,2位十六进制数。

J:数据编码方案,2位十六进制数。

K:有效期,2位十六进制数。

L:用户数据长度,2位十六进制数。

M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。

PDU编码协议简单说明

例1 发送:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“Hello!”。从手机发出的PDU串可以是

08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 96 03 29 30 F0 00 00 00 06 C8 32 9B FD 0E 01

对照规范,具体分析:

分段 含义 说明

08 SMSC地址信息的长度 共8个八位字节(包括91)

91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 31 08 20 05 05 F0 SMSC地址 8613800250500,补‘F’凑成偶数个

11 基本参数(TP-MTI/VFP) 发送,TP-VP用相对格式

00 消息基准值(TP-MR) 0

0D 目标地址数字个数 共13个十进制数(不包括91和‘F’)

91 目标地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 31 96 03 29 30 F0 目标地址(TP-DA) 8613693092030,补‘F’凑成偶数个

00 协议标识(TP-PID) 是普通GSM类型,点到点方式

00 用户信息编码方式(TP-DCS) 7-bit编码

00 有效期(TP-VP) 5分钟

06 用户信息长度(TP-UDL) 实际长度6个字节

C8 32 9B FD 0E 01 用户信息(TP-UD) “Hello!”

例2 接收:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“你好!”。手机接收到的PDU串可以是

08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 96 03 29 30 F0 00 08 30 30 21 80 63 54 80 06 4F 60 59 7D 00 21

对照规范,具体分析:


分段含义说明

08 地址信息的长度 共个八位字节(包括91)

91 SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 31 08 20 05 05 F0 SMSC地址 8613800250500,补‘F’凑成偶数个

84 基本参数(TP-MTI/MMS/RP) 接收,无更多消息,有回复地址

0D 回复地址数字个数 共13个十进制数(不包括91和‘F’)

91 回复地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)

68 31 96 03 29 30 F0 回复地址(TP-RA) 8613693092030,补‘F’凑成偶数个

00 协议标识(TP-PID) 是普通GSM类型,点到点方式

08 用户信息编码方式(TP-DCS) UCS2编码

30 30 21 80 63 54 80 时间戳(TP-SCTS) 2003-3-12 08:36:45  +8时区

06 用户信息长度(TP-UDL) 实际长度6个字节

4F 60 59 7D 00 21 用户信息(TP-UD) “你好!”

若基本参数的最高位(TP-RP)为0,则没有回复地址的三个段。从Internet上发出的短消息常常是这种情形。

注意号码和时间的表示方法,不是按正常顺序顺着来的,而且要以‘F’将奇数补成偶数。

在PDU Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。

需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。如果用户信息(TP-UD)中存在一个头 (基本参数的TP-UDHI为1),在所有编码方式下,用户信息长度(TP-UDL)都等于头长度与编码后字节数之和。如果采用GSM 03.42所建议的压缩算法(TP-DCS的高3位为001),则该长度也是压缩编码后字节数或头长度与压缩编码后字节数之和。


菊子曰 今天你菊子曰了么?

Incoming search terms:

  • GSM
  • gsm pdu
  • gsm PDU Э
  • pdu
  • 7-bit GSM
  • pduЭ
  • smsc pdu
  • ucs2
  • UDHI GSM
  • 短信 pdu