串口文件传输协议(串口文件传输协议文件下载)

      最后更新:2022-11-02 04:44:09 手机定位技术交流文章

      如何使用Xmodem传输交换机系统文件

      内容提要:本文描述了使用XMOMDEM文件传输协议的通信程序设计,该设计为具有FLASH存储器的嵌入式系统提供了和PC机上超级终端软件之间的文件传输功能,在PC机上不安装专用通信软件情况下,实现程序在板升级、数据在板定制等,给现场调试和维护带来方便。另外,本文也描述了基于状态矩阵的通信软件编程方法。关键字:XMODEM文件下载FSM状态矩阵1设计目的与用途2XMODEM协议介绍3协议分层与层间接口3.1协议分层3.2链路层和物理层间的接口3.3链路层和应用层间的接口4分层协议实现4.1协议的OS平台4.2应用层软件实现4.3链路层软件实现4.4物理层软件实现5软件移植6软件调试方法参考文献附录1:XMODEM协议通信的异常情况列表附录2:XMODEM协议的状态转移表附录3:源代码文件列表附录4:完整源代码1设计目的与用途嵌入式系统的程序代码一般存放在FLASH存储器或者OTP存储器中,后者实际上是一种一次性可编程的EPROM,成本低,适合于批量大的产品使用,但程序写入后不能修改,使用FLASH的优点是程序可以随时在板更换,这种特点给现场调试和软件升级、修改带来极大方便。对印制板上FLASH编程有几种方法,原始的方法是使用编程器,由于要将芯片取下,十分不便,也有一些厂家生产的处理器通过JTAG接口或者串口连接到PC机上(如PHILIPS公司的P89C51RD),可以实现处理器内部FLASH的在板编程,但需要专用下载编程软件(一般由芯片生产厂商提供),无法对处理器外部的FLASH进行编程。使用XMODEM协议进行程序下载是目前很多产品通用的做法,比如CISCO公司的路由器产品,HUAWEI公司的ISDN终端产品,这种方法使用WINDOWS自带的超级终端软件来传送文件,无需安装专用软件。只要在目标板上增加一断实现XMODEM协议的代码,就可以方便地实现程序或者数据文件的下载了。在下文中,就叙述XMODEM协议程序的实现方法。图表1:目标板程序由二部分组成:下载程序和应用程序2XMODEM协议介绍XMODEM协议是最早出现的2台计算机间通过RS232异步串口进行文件传输的通信协议标准,相对于YMODEM,ZMODEM等其他文件传送协议来说,XMODEM协议实现简单,适合于那些存储器有限的场合。XMODEM文件发送方将文件分解成128字节的定长数据块,每发送一个数据块,等待对方应答后才发送下一个数据块,数据校验采用垂直累加和校验,也可以采用16位的CRC校验。属于简单ARQ(自动请求重发)协议,所以也适合于2线制的半双工的RS485网络中使用。2.1术语在具体叙述XMODEM协议的具体内容前,我们先给出协议用到的术语缩写。术语数值含义备注十进制十六进制SOH101H数据块开始EOT404H发送结束ACK606H认可响应NAK2115H不认可响应对于CRC校验的协议软件,本信号用字母“C”(43H)代替。DLE1610H中止数据连接X-on1711H数据传送启动当通信双方的速度不一致时,可采用该字符来调节通信速度,比如接收方速度太慢而导致接收缓冲器满时,发送“X-off”给发送方,使发送方暂停发送数据。相当于RS232接口的DSR,CTS等信号。X-off1913H数据传送停止SYN2216H同步CAN2418H撤销传送图表2:XMODEM协议的控制字符上表中各个缩写也是标准ASCII码的一个字符,在XMODEM协议中需要使用这些字符来表达协议的状态。而其基本含义如表中所述。2.2数据帧格式与文件分解XMODEM协议每次传送的数据帧长度为132字节,其中文件数据占128字节,其他4个字节分别为开始标志,块序号,块序号的补码和校验字节。其中开始标志,块序号,块序号的补码位于数据块开始,校验字节位于数据块结尾,如:偏移字节数名称描述说明名称数值(HEX)01SOH01起始字节标志11Seq1~FFh块序号21cmplFFH-seq块序号的补码3128data?文件内容数据1311csum?垂直累加和校验1:XMODEM协议允许使用2种校验码。2:校验码只从128字节的数据进行计算后得出,头部3个字节不参加校验和运算。2CRC?16位循环冗余校验图表3:XMODEM协议的数据帧格式如果文件长度不是128字节的整数倍,最后一个数据块的有效内容必然小于帧长,剩下部分需要用其他数据来填充,XMODEM建议使用“CTRL-Z”(=26(01aH)),这种情况下,接收方如何区别该帧中属于文件的内容和填充的内容呢?如果传送的文件是只包含字母、数字和可显示符号的文本文件(例如C程序源代码文件),那么根据内容本身接收方是可以区分的(“26”不是字母或者数字的ASCII码),如果传送的是任意数值的二进制文件(如程序目标码),则接收方是无法区分文件内容和填充内容。重要提示:XMODEM协议不能保证接收方接收的文件长度和发送方完全一致,接收方所接收的文件数据长度总是128字节的整数倍,比发送文件的实际长度要大1到127字节。多出的内容位于文件结尾处。XMODEM协议的这种缺点对于用于嵌入式系统的程序代码下装没有实际影响,处理器不会将填充内容当作代码执行,只要程序存储器的容量足够,能存储接收的所有数据就可以了。如果将XMODEM协议用于数据库下装,应当考虑多余内容的影响,一般标准数据库文件中均有表示数据库尺寸、字段数、记录数等数据库结构参数,所以也不会把填充内容当作数据库的记录本身。同样,对于汉字库这种数据库,使用XMODEM协议来下载也不会产生问题。2.3校验算法校验码是对发送数据进行某种计算得到的编码,为了防止数据在发送途中某些位发生错误,各种数据通信协议规定发送方除了发送应用数据外,还要发送校验码,而数据接收方则根据同样算法从收到的应用数据中计算出校验码,并和发送方发送的校验码比较,如相等,才认为收到了正确的数据。在XMODEM协议中,可使用垂直累加和或者CRC校验,使用CRC校验的通信软件可以自动从CRC校验自动切换到累加和校验模式。在本应用中,我们使用垂直累加和校验。累加和校验码是将所有发送数据的和按字节累加,保留其最低字节作为校验码,例如,发送的3个字节数据分别为255(FFh),5(05h),6(06h),则:11111111FFH0000010105H0000011006H100001010->00001010将高位丢弃后,得到累加和校验码为0Ah(10)。在上例中,如果原来数据在途中发生了变化,如FFH变为FEH,06H变为07H,05H未变,则接收方所计算的校验码为:接收发送11111110FEH00001010校验码也为0AH。可见,在数据中有2位改变时,接收方所计算的校验码仍然与发送方一致,这种校验方式不能检测偶数位的误码。XMODEM协议的校验码只对数据帧中的128字节数据进行计算后得出,头部3个字节不参加校验和运算。2.4XMODEM协议的启动XMODEM协议开始是文件接收方发出“NAK”字节,文件发送方在收到该信号后发送数据帧,双方开始正常通信过程。而文件发送方进入XMODEN协议后,等待对方发送”NAK”,如果等待时间超过60秒,则退出本次通信。接收方发出“NAK”后,如果10秒后对方还没有发送第一个数据帧,则重复发送“NAK”,这种重复次数最多允许10次,仍然没有收到第一个数据块,则退出本次通信。(A):发送方软件延迟100秒以上工作导致不能启动协议(B):接收方软件延迟60秒发送”NAK”信号导致不能启动协议图表4XMODEM协议不能启动的2种情况在嵌入式系统通过PC机来下载软件的应用中,嵌入式系统软件是文件接收方,PC机超级终端软件是文件发送方。按照协议规定,嵌入式系统的通信软件进入XMODEM协议状态后,PC机软件必须在100秒内进入协议状态(即执行超级终端的XMODEM文件传输功能),反之,后者先进入协议状态,前者必须在60秒内进入协议状态,显然,通过人工来操作,这种时间差有些紧张。解决法只有加长嵌入式系统加载软件的启动等待时间,这种修改不会引起协议理解的歧义。重要提示:为了发送和接收方能够更容易启动XMODEM协议,在设计中,将延长嵌入式系统下载软件的启动延时时间,在以下的代码中,将这种延时时间改为600秒(10分钟)。或者将等待时间设置为无限长,一致发出”NAK”信号,直到PC机上的超级终端软件运行为止。2.5XMODEM的正常传输过程中给出了一次正常的XMODEM通信中收发双方的通信过程。图5:没有差错的文件传输过程文件接收方每收到一个数据帧后,如没有校验差错、序号差错等情况,均发送一个“ACK”字符作为应答,发送方在收到应答后才开始发送下一个字符,如此反复,直到文件内容传送完毕,发送方传送“EOT”字符表示传送完成,发送方收到后再次以“ACK”回应,至此,整个文件传输过程就结束了。2.6XMODEM协议的中止在通信进行过程中,双方中的任意一方如果希望中止本次通信,可以发送“CAN”字符给对方,现在很多XMODEM协议软件要求发送2个”CAN”字符来实现,协议软件的主动中止通信一般是人为发起的,例如按下超级终端软件的“取消”按钮。或者通过拔码开关来控制嵌入式系统的下载软件退出通信。2.7XMODEM协议的异常处理在通信过程中,总是要出现各种异常情况,比如通信线路的突然中断,一方机器停电而导致软件中止执行等;通信软件必须能够检测这些错误,并作出合理的处理。在前面的协议启动一节中已经涉及到了错误检测的问题,XMODEM对错误的规定很详细,共计有8种情况,协议文本没有说明是如何引起的,中给出了可能原因,在嵌入式系统中,考虑到下载软件一般均有人操作的,也可不考虑错误处理,这样实现实现代码会减小。在本文中,考虑到协议的完整性,考虑了各种错误的处理。2.8CRC校验与累加和校验方式的切换XMODEM协议要求支持CRC校验的通信软件也能支持累加和校验,这样就可以和那些只支持累加和校验的软件进行通信,如果文件接收方只支持累加和,而发送方可支持CRC,接收方发送启动信号为“NAK”,发送方收到后自动按累加和方式发送数据帧;如果相反,接收方支持CRC,而发送方支持累加和,接收方首先发出字母“C”来作为启动信号,这时接收方应不理睬此信号,发送方在3秒后继续发送信号“C”,共三次未收到应答后,改为发送“NAK”信号,表示使用累加和方式进行通信了。如果通信双方均采用CRC校验,上述通信握手信号“NAK”用字母“C来代替,其他过程同上。因为PC机超级终端软件支持CRC模式,嵌入式系统作为文件接收方,只要发送“NAK”信号就能使对方自动按照校验和方式通信了。3协议分层与层间接口3.1协议分层我们将协议代码分成3层:物理层,链路层和协议应用层。物理层用于控制UART器件,链路层处理XMODEM协议,应用层负责将收到的单个128字节数据块组合成一个完成的数据块,并写入程序存储器缓冲区。这种分层,在程序移植时只要修改和硬件相关的物理层、应用层代码,无需修改实现XMODEM协议的链路层代码。层与层之间通过消息来通信,XMODEM协议没有规定分层结构和层间消息格式,这里将链路层与应用层之间、链路层和物理层之间的消息格式统一规定如下:typedefstruct{intlen;/*消息内容长度,即Message中的内容字节数*/charmType;/*层间消息类型,*/charMessage[MAX_MESSAGE_LEN];/*消息内容,由发送进程填写*/}MessageOfLayer;考虑到XMODEM数据帧为132字节,定义常量“MAX_MESSAGE_LEN”为132字节,按OSI标准,层间消息原语有数据请求、数据指示、响应、证实4种类型。给出了A方发送数据,B方接收数据时的层间消息类型图6:单向数据传送的层间消息顺序:①②③④消息1,2是承载实际数据的数据帧,消息3,4是传送过程中的应答帧,表明数据已经正确传送,必须说明的是,在发送数据的证实消息3不是从对方发出的,物理层在发送出数据后,立即向上一层发出证实消息。在实际应用中,处理正常的数据传送所需要的消息外,也需要定义一些控制管理消息,下面具体说明层间消息类型和作用。3.2链路层和物理层间的接口n数据请求:该消息用于向物理层发送XMODEM帧数据,包括132字节的文件数据帧和NAK,ACK,CAN单字节信号帧等,下载软件只是接收文件,不需要发送132字节的文件数据帧。n数据证实:物理层收到链路层的数据请求帧后,送到UART的缓冲器中,等发送缓冲器为空后,表明该字节数据发送完成,向链路层发送证实消息,链路层接收到此消息后,就可以发送下一个字节,实际上物理层传送是一个无连接,证实消息不是由接收方产生的,不能表明对方已经正确接收到数据,而只表明已经发出数据。物理层协议一般也不提供有应答的传输机制。n数据指示:物理层在接收缓冲器满后,将数据发送给链路层。除了以上3个消息外,物理层和应用层之间还有以下2个消息:n启动电路:由链路层向物理层发出,物理层在收到该协议后将串口进行初始化。n电路出错:由物理层向链路层发出,用于报告物理层在数据传送过程中的错误。“数据响应”消息在本应用中不使用。3.3链路层和应用层间的接口链路层和应用层之间的数据传输消息有二个:n数据块指示:由链路层收到一个XMODEM协议帧(128字节)后向应用层发出,应用层收到数据帧后写入flashmemory(PC版本写入文件)。n数据块块响应:应用层收到XMODEM数据帧后,并写入flashmemory(PC版本写入文件)后向链路层发出的响应信号。链路层收到响应后,向文件发送方发出“ACK”信号。其他管理控制消息定义了3个:n协议启动:应用层通知链路层启动XMODEM协议。n通信结束:链路层在收到对方的EOT信号后向应用层发出,应用层收到此消息后,可以转入应用程序入口,从而执行应用程序。n通信中止:链路层因为各种情况无法继续进行XMODEM传输时向应用层传送该消息,应用层收到此消息后,丢弃已经收到的数据,发出通信错误指示。4分层协议实现4.1协议的OS平台为了实现分层协议,使用中的非抢先式操作系统作为软件平台,各层分别作为一个进程。4.2应用层软件实现嵌入式系统下载软件只接收代码文件,对于协议中作为文件发送方的处理代码可不编写,应用层的任务是接收链路层的数据包,根据收到数据包的先后次序写入程序存储器,在PC机上模拟实现时,我们将数据存放在一个缓冲区内,完成后写入文件中,使用windiff软件和发送文件进行比较,以判断代码的是否正确。应用层的进程初始化代码的作用是:n擦除程序存储器所使用的FLASHMEMORY(在本例中按29F010来编写代码)。n启动一个10秒定时器,10秒后通知链路层启动XMODEM协议。n
      如何使用Xmodem传输交换机系统文件

      串口通信协议的握手

      RS-232通信方式允许简单连接三线:Tx、Rx和地线。但是对于数据传输,双方必须对数据定时采用使用相同的波特率。尽管这种方法对于大多数应用已经足够,但是对于接收方过载的情况这种使用受到限制。这时需要串口的握手功能。在这一部分,我们讨论三种最常用的RS-232握手形式:软件握手、硬件握手和Xmodem。a,软件握手:我们讨论的第一种握手是软件握手。通常用在实际数据是控制字符的情况,类似于GPIB使用命令字符串的方式。必须的线仍然是三根:Tx,Rx和地线,因为控制字符在传输线上和普通字符没有区别,函数SetXModem允许用户使用或者禁止用户使用两个控制字符XON和XOFF。这些字符在通信中由接收方发送,使发送方暂停。例如:假设发送方以高波特率发送数据。在传输中,接收方发现由于CPU忙于其他工作,输入buffer已经满了。为了暂时停止传输,接收方发送XOFF,典型的值是十进制19,即十六进制13,直到输入buffer空了。一旦接收方准备好接收,它发送XON,典型的值是十进制17,即十六进制11,继续通信。输入buffer半满时,LabWindows发送XOFF。此外,如果XOFF传输被打断,LabWindows会在buffer达到75%和90%时发送XOFF。显然,发送方必须遵循此守则以保证传输继续。b,硬件握手:第二种是使用硬件线握手。和Tx和Rx线一样,RTS/CTS和DTR/DSR一起工作,一个作为输出,另一个作为输入。第一组线是RTS(Request to Send)和CTS(Clear toSend)。当接收方准备好接收数据,它置高RTS线表示它准备好了,如果发送方也就绪,它置高CTS,表示它即将发送数据。另一组线是DTR(DataTerminal Ready)和DSR(Data SetReady)。这些线主要用于Modem通信。使得串口和Modem通信他们的状态。例如:当Modem已经准备好接收来自PC的数据,它置高DTR线,表示和电话线的连接已经建立。读取DSR线置高,PC机开始发送数据。一个简单的规则是DTR/DSR用于表示系统通信就绪,而RTS/CTS用于单个数据包的传输。在LabWindows,函数SetCTSMode使能或者禁止使用硬件握手。如果CTS模式使能,LabWindows使用如下规则:当PC发送数据:RS-232库必须检测CTS线高后才能发送数据。当PC接收数据:如果端口打开,且输入队列有空接收数据,库函数置高RTS和DTR。如果输入队列90%满,库函数置低RTS,但使DTR维持高电平。如果端口队列近乎空了,库函数置高RTS,但使DTR维持高电平。如果端口关闭,库函数置低RTS和DTR。c,XModem握手:最后讨论的握手叫做XModem文件传输协议。这个协议在Modem通信中非常通用。尽管它通常使用在Modem通信中,XModem协议能够直接在其他遵循这个协议的设备通信中使用。在LabWindows中,实际的XModem应用对用户隐藏了。只要PC和其他设备使用XModem协议,在文件传输中就使用LabWindows的XModem函数。函数是XModemConfig,XModemSend和XModemReceive。XModem使用介于如下参数的协议:start_of_data、end_of_data、neg_ack、wait_delay、start_delay、max_tries、packet_size。这些参数需要通信双方认定,标准的XModem有一个标准的定义:然而,可以通过XModemConfig函数修改,以满足具体需要。这些参数的使用方法由接收方发送的字符neg_ack确定。这通知发送方其准备接收数据。它开始尝试发送,有一个超时参数start_delay;当超时的尝试超过max_ties次数,或者收到接收方发送的start_of_data,发送方停止尝试。如果从发送方收到start_of_data,接收方将读取后继信息数据包。包中含有包的数目、包数目的补码作为错误校验、packet_size字节大小的实际数据包,和进一步错误检查的求和校验值。在读取数据后,接收方会调用wait_delay,然后向发送方发送响应。如果发送方没有收到响应,它会重新发送数据包,直到收到响应或者超过重发次数的最大值max_tries。如果一直没有收到响应,发送方通知用户传输数据失败。由于数据必须以pack_size个字节按包发送,当最后一个数据包发送时,如果数据不够放满一个数据包,后面会填充ASCII码NULL(0)字节。这导致接收的数据比原数据多。在XModem情况下一定不要使用XON/XOFF,因为XModem发送方发出包的数目很可能增加到XON/OFF控制字符的值,从而导致通信故障。
      串口通信协议的握手

      xmodem ymodem 主要区别

      内容提要:本文描述了使用XMOMDEM文件传输协议的通信程序设计,该设计为具有FLASH 存储器的嵌入式系统提供了和PC机上超级终端软件之间的文件传输功能,在PC机上不安装专用通信软件情况下,实现程序在板升级、数据在板定制等,给现场调试和维护带来方便。另外,本文也描述了基于状态矩阵的通信软件编程方法。 关 键 字: XMODEM文件下载FSM状态矩阵1 设计目的与用途2 XMODEM协议介绍3 协议分层与层间接口3.1 协议分层3.2 链路层和物理层间的接口3.3 链路层和应用层间的接口4 分层协议实现4.1 协议的OS平台4.2 应用层软件实现4.3 链路层软件实现4.4 物理层软件实现5 软件移植6 软件调试方法参考文献附录1:XMODEM协议通信的异常情况列表附录2:XMODEM协议的状态转移表附录3:源代码文件列表附录4:完整源代码1 设计目的与用途嵌入式系统的程序代码一般存放在FLASH存储器或者OTP存储器中,后者实际上是一种一次性可编程的EPROM,成本低,适合于批量大的产品使用,但程序写入后不能修改,使用FLASH的优点是程序可以随时在板更换,这种特点给现场调试和软件升级、修改带来极大方便。对印制板上FLASH编程有几种方法,原始的方法是使用编程器,由于要将芯片取下,十分不便,也有一些厂家生产的处理器通过JTAG接口或者串口连接到PC机上(如PHILIPS公司的P89C51RD),可以实现处理器内部FLASH的在板编程,但需要专用下载编程软件(一般由芯片生产厂商提供),无法对处理器外部的FLASH进行编程。使用XMODEM协议进行程序下载是目前很多产品通用的做法,比如CISCO公司的路由器产品,HUAWEI公司的ISDN终端产品,这种方法使用WINDOWS自带的超级终端软件来传送文件,无需安装专用软件。只要在目标板上增加一断实现XMODEM协议的代码,就可以方便地实现程序或者数据文件的下载了。在下文中,就叙述XMODEM协议程序的实现方法。图表 1:目标板程序由二部分组成:下载程序和应用程序2 XMODEM协议介绍XMODEM协议是最早出现的2台计算机间通过RS232异步串口进行文件传输的通信协议标准,相对于YMODEM,ZMODEM等其他文件传送协议来说,XMODEM协议实现简单,适合于那些存储器有限的场合。XMODEM文件发送方将文件分解成128字节的定长数据块,每发送一个数据块,等待对方应答后才发送下一个数据块,数据校验采用垂直累加和校验,也可以采用16位的CRC校验。属于简单ARQ(自动请求重发)协议,所以也适合于2线制的半双工的RS485网络中使用。2.1 术语在具体叙述XMODEM协议的具体内容前,我们先给出协议用到的术语缩写。术语 数值 含义 备注十进制 十六进制SOH 1 01H 数据块开始EOT 4 04H 发送结束ACK 6 06H 认可响应NAK 21 15H 不认可响应 对于CRC校验的协议软件,本信号用字母“C”(43H)代替。DLE 16 10H 中止数据连接X-on 17 11H 数据传送启动 当通信双方的速度不一致时,可采用该字符来调节通信速度,比如接收方速度太慢而导致接收缓冲器满时,发送“X-off”给发送方,使发送方暂停发送数据。相当于RS232接口的DSR,CTS等信号。X-off 19 13H 数据传送停止SYN 22 16H 同步CAN 24 18H 撤销传送图表 2:XMODEM协议的控制字符上表中各个缩写也是标准ASCII码的一个字符,在XMODEM协议中需要使用这些字符来表达协议的状态。而其基本含义如表中所述。2.2 数据帧格式与文件分解XMODEM协议每次传送的数据帧长度为132字节,其中文件数据占128字节,其他4个字节分别为开始标志,块序号,块序号的补码和校验字节。其中开始标志,块序号,块序号的补码位于数据块开始,校验字节位于数据块结尾,如:偏移 字节数 名称 描述 说明名称 数值(HEX)0 1 SOH 01 起始字节标志1 1 Seq 1~FFh 块序号2 1 cmpl FFH-seq 块序号的补码3 128 data? 文件内容数据131 1 csum ? 垂直累加和校验 1:XMODEM协议允许使用2种校验码。2:校验码只从128字节的数据进行计算后得出,头部3个字节不参加校验和运算。2 CRC ? 16位循环冗余校验图表 3:XMODEM协议的数据帧格式如果文件长度不是128字节的整数倍,最后一个数据块的有效内容必然小于帧长,剩下部分需要用其他数据来填充,XMODEM建议使用“CTRL-Z”(=26(01aH)),这种情况下,接收方如何区别该帧中属于文件的内容和填充的内容呢?如果传送的文件是只包含字母、数字和可显示符号的文本文件(例如C程序源代码文件),那么根据内容本身接收方是可以区分的(“26”不是字母或者数字的ASCII码),如果传送的是任意数值的二进制文件(如程序目标码),则接收方是无法区分文件内容和填充内容。重要提示:XMODEM协议不能保证接收方接收的文件长度和发送方完全一致,接收方所接收的文件数据长度总是128字节的整数倍,比发送文件的实际长度要大1到127字节。多出的内容位于文件结尾处。XMODEM协议的这种缺点对于用于嵌入式系统的程序代码下装没有实际影响,处理器不会将填充内容当作代码执行,只要程序存储器的容量足够,能存储接收的所有数据就可以了。如果将XMODEM协议用于数据库下装,应当考虑多余内容的影响,一般标准数据库文件中均有表示数据库尺寸、字段数、记录数等数据库结构参数,所以也不会把填充内容当作数据库的记录本身。同样,对于汉字库这种数据库,使用XMODEM协议来下载也不会产生问题。2.3 校验算法校验码是对发送数据进行某种计算得到的编码,为了防止数据在发送途中某些位发生错误,各种数据通信协议规定发送方除了发送应用数据外,还要发送校验码,而数据接收方则根据同样算法从收到的应用数据中计算出校验码,并和发送方发送的校验码比较,如相等,才认为收到了正确的数据。在XMODEM协议中,可使用垂直累加和或者CRC校验,使用CRC校验的通信软件可以自动从CRC校验自动切换到累加和校验模式。在本应用中,我们使用垂直累加和校验。累加和校验码是将所有发送数据的和按字节累加,保留其最低字节作为校验码,例如,发送的3个字节数据分别为255(FFh),5(05h),6(06h), 则:1 1 1 11 1 1 1 FFH0 0 0 00 1 0 1 05H0 0 0 00 1 1 006H10 0 0 01 0 1 0 -> 0000 1010将高位丢弃后,得到累加和校验码为0Ah(10)。在上例中,如果原来数据在途中发生了变化,如FFH变为FEH,06H变为07H, 05H未变,则接收方所计算的校验码为:接收发送1 1 1 11 1 1 0 FEH<- FFH0 0 0 00 1 0 1 05H< - 05H0 0 0 00 1 1 107H<- 06H10 0 0 01 0 1 0 -> 0000 1010校验码也为0AH。可见,在数据中有2位改变时,接收方所计算的校验码仍然与发送方一致,这种校验方式不能检测偶数位的误码。XMODEM协议的校验码只对数据帧中的128字节数据进行计算后得出,头部3个字节不参加校验和运算。2.4 XMODEM协议的启动XMODEM协议开始是文件接收方发出“NAK”字节,文件发送方在收到该信号后发送数据帧,双方开始正常通信过程。而文件发送方进入XMODEN协议后,等待对方发送”NAK”,如果等待时间超过60秒,则退出本次通信。接收方发出“NAK”后,如果10秒后对方还没有发送第一个数据帧,则重复发送“NAK”,这种重复次数最多允许10次,仍然没有收到第一个数据块,则退出本次通信。(A):发送方软件延迟100秒以上工作导致不能启动协议(B):接收方软件延迟60秒发送”NAK”信号导致不能启动协议图表 4XMODEM协议不能启动的2种情况在嵌入式系统通过PC机来下载软件的应用中,嵌入式系统软件是文件接收方,PC机超级终端软件是文件发送方。按照协议规定,嵌入式系统的通信软件进入XMODEM协议状态后,PC机软件必须在100秒内进入协议状态(即执行超级终端的XMODEM文件传输功能),反之,后者先进入协议状态,前者必须在60秒内进入协议状态,显然,通过人工来操作,这种时间差有些紧张。解决办法只有加长嵌入式系统加载软件的启动等待时间,这种修改不会引起协议理解的歧义。重要提示:为了发送和接收方能够更容易启动XMODEM协议,在设计中,将延长嵌入式系统下载软件的启动延时时间,在以下的代码中,将这种延时时间改为600秒(10分钟)。或者将等待时间设置为无限长,一致发出”NAK”信号,直到PC机上的超级终端软件运行为止。2.5 XMODEM的正常传输过程中给出了一次正常的XMODEM通信中收发双方的通信过程。图 5:没有差错的文件传输过程文件接收方每收到一个数据帧后,如没有校验差错、序号差错等情况,均发送一个“ACK”字符作为应答,发送方在收到应答后才开始发送下一个字符,如此反复,直到文件内容传送完毕,发送方传送“EOT”字符表示传送完成,发送方收到后再次以“ACK”回应,至此,整个文件传输过程就结束了。2.6 XMODEM协议的中止在通信进行过程中,双方中的任意一方如果希望中止本次通信,可以发送“CAN”字符给对方,现在很多XMODEM协议软件要求发送2个”CAN”字符来实现,协议软件的主动中止通信一般是人为发起的,例如按下超级终端软件的“取消”按钮。或者通过拔码开关来控制嵌入式系统的下载软件退出通信。2.7 XMODEM协议的异常处理在通信过程中,总是要出现各种异常情况,比如通信线路的突然中断,一方机器停电而导致软件中止执行等;通信软件必须能够检测这些错误,并作出合理的处理。在前面的协议启动一节中已经涉及到了错误检测的问题,XMODEM对错误的规定很详细,共计有8种情况,协议文本没有说明是如何引起的,中给出了可能原因,在嵌入式系统中,考虑到下载软件一般均有人操作的,也可不考虑错误处理,这样实现实现代码会减小。在本文中,考虑到协议的完整性,考虑了各种错误的处理。2.8 CRC校验与累加和校验方式的切换XMODEM协议要求支持CRC校验的通信软件也能支持累加和校验,这样就可以和那些只支持累加和校验的软件进行通信,如果文件接收方只支持累加和,而发送方可支持CRC,接收方发送启动信号为“NAK”,发送方收到后自动按累加和方式发送数据帧;如果相反,接收方支持CRC,而发送方支持累加和,接收方首先发出字母“C”来作为启动信号,这时接收方应不理睬此信号,发送方在3秒后继续发送信号“C”,共三次未收到应答后,改为发送“NAK”信号,表示使用累加和方式进行通信了。如果通信双方均采用CRC校验,上述通信握手信号“NAK”用字母“C来代替,其他过程同上。因为PC机超级终端软件支持CRC模式,嵌入式系统作为文件接收方,只要发送“NAK”信号就能使对方自动按照校验和方式通信了。3 协议分层与层间接口3.1 协议分层我们将协议代码分成3层:物理层,链路层和协议应用层。物理层用于控制UART器件,链路层处理XMODEM协议,应用层负责将收到的单个128字节数据块组合成一个完成的数据块,并写入程序存储器缓冲区。这种分层,在程序移植时只要修改和硬件相关的物理层、应用层代码,无需修改实现XMODEM协议的链路层代码。层与层之间通过消息来通信,XMODEM协议没有规定分层结构和层间消息格式,这里将链路层与应用层之间、链路层和物理层之间的消息格式统一规定如下:typedef struct {int len; /*消息内容长度,即Message中的内容字节数 */char mType;/*层间消息类型, */char Message[MAX_ MESSAGE_LEN];/*消息内容,由发送进程填写*/} MessageOfLayer;考虑到XMODEM数据帧为132字节,定义常量“MAX_MESSAGE_LEN”为132字节,按OSI标准,层间消息原语有数据请求、数据指示、响应、证实4种类型。给出了A方发送数据,B方接收数据时的层间消息类型图 6: 单向数据传送的层间消息顺序:①②③④消息1,2是承载实际数据的数据帧,消息3,4是传送过程中的应答帧,表明数据已经正确传送,必须说明的是,在发送数据的证实消息3不是从对方发出的,物理层在发送出数据后,立即向上一层发出证实消息。在实际应用中,处理正常的数据传送所需要的消息外,也需要定义一些控制管理消息,下面具体说明层间消息类型和作用。3.2 链路层和物理层间的接口n 数据请求:该消息用于向物理层发送XMODEM帧数据,包括132字节的文件数据帧和NAK,ACK,CAN单字节信号帧等,下载软件只是接收文件,不需要发送132字节的文件数据帧。n 数据证实:物理层收到链路层的数据请求帧后,送到UART的缓冲器中,等发送缓冲器为空后,表明该字节数据发送完成,向链路层发送证实消息,链路层接收到此消息后,就可以发送下一个字节,实际上物理层传送是一个无连接,证实消息不是由接收方产生的,不能表明对方已经正确接收到数据,而只表明已经发出数据。物理层协议一般也不提供有应答的传输机制。n 数据指示:物理层在接收缓冲器满后,将数据发送给链路层。除了以上3个消息外,物理层和应用层之间还有以下2个消息:n 启动电路:由链路层向物理层发出,物理层在收到该协议后将串口进行初始化。n 电路出错:由物理层向链路层发出,用于报告物理层在数据传送过程中的错误。“数据响应”消息在本应用中不使用。3.3 链路层和应用层间的接口链路层和应用层之间的数据传输消息有二个:n 数据块指示:由链路层收到一个XMODEM协议帧(128字节)后向应用层发出,应用层收到数据帧后写入flash memory(PC版本写入文件)。n 数据块块响应:应用层收到XMODEM数据帧后,并写入flash memory(PC版本写入文件)后向链路层发出的响应信号。链路层收到响应后,向文件发送方发出“ACK”信号。其他管理控制消息定义了3个:n 协议启动:应用层通知链路层启动XMODEM协议。n 通信结束:链路层在收到对方的EOT信号后向应用层发出,应用层收到此消息后,可以转入应用程序入口,从而执行应用程序。n 通信中止:链路层因为各种情况无法继续进行XMODEM传输时向应用层传送该消息,应用层收到此消息后,丢弃已经收到的数据,发出通信错误指示。4 分层协议实现4.1 协议的OS平台为了实现分层协议,使用中的非抢先式操作系统作为软件平台,各层分别作为一个进程。4.2 应用层软件实现嵌入式系统下载软件只接收代码文件,对于协议中作为文件发送方的处理代码可不编写,应用层的任务是接收链路层的数据包,根据收到数据包的先后次序写入程序存储器,在PC机上模拟实现时,我们将数据存放在一个缓冲区内,完成后写入文件中,使用windiff软件和发送文件进行比较,以判断代码的是否正确。应用层的进程初始化代码的作用是:n 擦除程序存储器所使用的FLASH MEMORY(在本例中按29F010来编写代码)。n 启动一个10秒定时器,10秒后通知链路层启动XMODEM协议。 n
      xmodem ymodem 主要区别

      如何通过串口把一个程序发给linux

      使用串口协议登录Linux终端控制台,通过Zmodem文件传输协议接收一个外部文件。 命令:rz -y会弹出文件浏览窗口,选择要上传的文件即可。-y 表示若文件已存在,则覆盖。
      如何通过串口把一个程序发给linux

      串口通信协议有哪些

      常见的串行通信协议 1.UARTUART是通用异步收发传输器,使用RxD和TxD两根线实现异步全双工通信;为确保通信可靠,可以在通信两边接共地;因此,完整的UART通信只需最少3根线即可。RxD是发送数据线,TxD是接收数据线,通信双方使用交叉互联,RxD接对方TxD,TxD接对方RxD。UART使用标准的TTL/CMOS电平(0~5V,0~3.3V,0~2.5V,0~1.8V)来表示数据,高电平表示1,低电平表示0.为了增强抗干扰能力,提高传输长度,可将TTL/CMOS 电平转换为RS232电平逻辑电平,3~12V表示0,-3~-12V表示1(RS232为负逻辑)1)UART平时处于空闲状态,逻辑1状态。2)当有数据发送时,先发送起始位,即将TxD拉低并维持1位时间,接收方在检测到起始位下降沿,等待1.5位后开始一位一位检测数据。3)发送数据,UART数据一帧可以是5,6,7,8位等,一般是8bit,一个字节。数据发送是先发送低位,依次发送,直到最高位。4)可以使用0或者1bit的校验位,校验位可以是奇校验或者偶检验。奇校验:数据加校验位中1的个数为奇数;偶校验:数据加校验位中1的个数为偶数。5)最后是停止位,数据线恢复到空闲状态,停止位可以是1,1.5,2位。1位时间由波特率决定,在UART通信中,波特率(一秒钟传输的符号数)等于比特率(一秒钟传输的字符数),通信双方使用约定的一致的波特率进行通信,常见的波特率有4800,9600,115200等。2.I2C与UART不同,I2C 是同步半双工通信协议。I2C使用SCL,SDA两根双向数据线进行通信,同时为了支持线与逻辑,需要使用开漏输出,同时使用上拉电阻;上拉电阻大小常见的有1.8K,4.7K,10K;在低速场合,为了降低功耗,可以使用10K上拉电阻,1.8K的上拉电阻具有最好的性能,可满足较高速的应用。I2C常见的通信速率有普通:100K,快速:400K,高速:3.4M。I2C最大的从机数量受从机地址和最大总线电容400pF电容的限制。I2C的数据帧格式如下:开始位 | 7bit从机地址 | 1bit读写方向位(0写,1读) | 1bit应答 | 8bit数据1 | 1bit应答1| 。.. | 8bit数据N |1bit非应答N | 停止位 。空闲状态:空闲时,SCL,SDA同时处于高电平。此时,各器件的输出场效应管处于截止状态,释放总线,总线信号由上拉电阻上拉至高电平。开始START:SCL为高电平时,SDA有下降沿。数据传输:数据传输已字节为单位,第一个字节表示从机地址+读写方向,后续数据格式由器件自己定义。数据传输中,SDA的只能在SCL低电平时变化,并在SCL上升沿进行数据采样。应答:每发送一个字节后,接收方必须回应答信号ACK,但发送最后一个字节后,回非应答信号NACK。停止STOP :SCL为高电平时,SDA有上升沿。握手机制:I2C提供握手机制,当主机速度太快而从机无法满足快速通信时,从机可以拉低SCL来与主机握手,从而延长SCL低电平的时间。(SCL高电平由所有器件发出最短的高电平决定,低电平则有低电平最长的决定)。仲裁:SDA是线与逻辑,因此,只要有一端输出低,总线就为低电平,因此是低电平优先仲裁。仲裁规则是发送低电平个数多的主机获得总线权。由于I2C通信的方向性,在一次通信中不能改变数据流方向,因此读过程中需要一次dummy写过程:dummy写完后,在restart,然后将数据流方向改为读,接着就可以读取从机数据内容了。3.SPISPI是同步全双工串行通信协议。SPI定义了4根信号线:SCK:时钟线,主机提供MISO:主入从出MOSI:主出从入SS:片选。片选信号可选,因此通信最少需要3根信号线。SPI在时钟上升沿下进行双向数据交换,主机在输出的同时,也会接收到从机的数据。在设计上,主机从机均需要一个移位寄存器。SPI不区分读写方向,只进行数据交换,要读也必须写,才能将数据交换过来。SPI通过时钟极性和时钟相位定义了4种通信模式:时钟极性CPOL:0:空闲时SCK为0,1:空闲时SCK为1.时钟相位CPHA:0:数据在第一个时钟跳沿采样(可能是上升沿,可能是下降沿,与CPOL有关),1:数据在第二个时钟跳沿采样(可能是上升沿,可能是下降沿,与CPOL有关)。 若在上沿采样,则数据在下沿输出,因此数据能够稳定的被采样。
      串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。 中文名串口通信协议外文名Serial communication protocol作用发送和接收字节学科计算机学作用用于获取远程采集设备的串口通信的基本原理串口在嵌入式系统当中是一类重要的数据通信接口,其本质功能是作为 CPU 和串行设备间的编码转换器。当数据从 CPU 经过串行端口发送出去时,字节数据转换为串行的位;在接收数据时,串行的位被转换为字节数据。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。典型地,串口用于 ASCII 码字符的传输。通信使用3根线完成:(1)地线,(2)发送数据线,(3)接收数据线。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配:波特率是一个衡量通信速度的参数,它表示每秒钟传送的 bit 的个数;数据位是衡量通信中实际数据位的参数,当计算机发送一个信息包,标准的值是 5,7 和 8 位。如何设置取决于你的需求;停止位用于表示单个包的最后一位,典型的值为 1,1.5和 2 位,停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会;奇偶校验位是串口通信中一种简单的检错方式,有四种检错方式——偶、奇、高和低,也可以没有校验位。[1]有关规定波特率串口异步通讯中由于没有时钟信号,所以通讯双方需要约定好波特率,即每个码元的长度,以便对信号进行解码。常见的波特率有4800、9600、115200等。起始位、停止位数据包从起始位开始,到停止位结束。起始信号用逻辑0的数据位表示,停止信号由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可。有效数据 起始位之后便是传输的主体数据内容了,也称为有效数据,其长度一般被约定为5、6、7或8位长。
      串口通信指l两个或两个以上的设备使用串口按位(bit)发送和接收字节。可以在使用一根线发送数据的同时用另一根线接收数据。 串口通信协议就是串口通讯时共同遵循的协议。 协议的内容是每一个bit 所代表的意义。 常用的串口通信协议 有以下几种 1 RS-232(ANSI/EIA-232标准) 只支持 点对点, 最大距离 50英尺。最大速度为128000bit/s, 距离越远 速度越慢。 支持全双工(发送同时也可接收)。2 RS-422(EIA RS-422-AStandard),支持点对多一条平衡总线上连接最多10个接收器 将传输速率提高到10Mbps,传输距离延长到4000英尺(约1219米),所以在100kbps速率以内,传输距离最大。支持全双工(发送同时也可接收)。RS-485(EIA-485标准)是RS-422的改进, 支持多对多(2线连接),从10个增加到32个,可以用超过4000英尺的线进行串行通行。速率最大10Mbps。支持全双工(发送同时也可接收)。2线连接时 是半双工状态。 广义上来说USB 协议 sata 硬盘 PCI_E 也是串行通信的范畴. 更为复杂
      串口是计算机上一种非常通用的设备通信协议(不要与通用串行总线UniversalSerialBus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信接口;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是比特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配:a,比特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,就是指比特率,例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的比特率为14400,28800和36600。比特率可以远远大于这些值,但是波特率和距离成反比。高比特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
      一、UART UART是一个大家族,其包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范。它们的主要区别在于其各自的电平范围不相同。嵌入式设备中常常使用到的是TTL、TTL转RS232的这种方式。常用的就三根引线:发送线TX、接收线RX、电平参考地线GND。1.1 电路示意图1.2 通信协议将传输数据的每个字符一位接一位地传输。https://img-blog.csdn.net/20170719232822650” alt=”串口数据传输示意图.png” title=”” />起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。波特率:数据传输的速率。有以下几个档位:300、600、1200、2400、4800、9600、19200、38400、43000、56000、57600、115200.当然也可以自定义。在数据传输和接收双方,需要预先统一波特率,以便正确的传输数据。二、I2C 总线2.1 电路示意图I²C (Inter-Integrated Circuit)。其拥有一根数据线SDA和一根时钟线SCL。其总线通过上拉电阻与电源相连接。每个接到I2C总线上的器件都有唯一的地址。其中,主动发起操作的一方为主机,另外一方为从机。2.2 数据传输 当没有数据传输的时候,两根总线都为高电
      串口通信协议有哪些

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/41861.html

          热门文章

          文章分类