串口是我的最爱,成本低,容易实现,连接简单方便。在我设计的硬件中,无一不配置一个串口,在主要功能完成之后,我会在计算机上再编写一个终端软件。这个软件可不只用来监控,我用这个软件完全控制硬件的所有功能,直到能够监测到硬件尽可能多的状态信息,只要一看这些信息,我就能知道硬件的工作状态如何,故障可能发生在哪里。
近来发现论坛里提问频率较高、问题也五花八门的问题之一就是串口通信问题,因此想在这里写点心得,也只是一点心得,对于网上很容易查到的信息,这里就不谈了。
问题一:缓冲区大小的问题。
现在绝大多数CPU都包含串口功能,同时也为串口配置了FIFO缓冲区,对于FIFO缓冲区的使用存在着些误区。
单就串口来说,通信也分为很多方式,缓冲区大小影响较大的有两种:突发通信和连续的数据流通信。突发通信的主要特点是:数据量小、持续时间短、通信发生时间不确定,通常的设备状态监控就属于这一类型。相对的数据流通信的特点是:数据量大、持续时间长等,如图像通信、音频采集等。
对于突发通信,应该不使用FIFO缓冲区,或者把FIFO大小设置为1。因为在如果把缓冲区大小设置为应该接收的数据的大小,那么发生通信错误如丢失数据时就不会产生中断,接收方会认为未发生通信事件,而发送方只能靠超时认为通信中断。这和接收到数据并判断出通信数据发生错误的性质是不同的,如果接收到数据我们就可以判断出发生错误的原因,如果接收不数据,那么怎么判断,硬件连接?FIFO设置?软件错误?软件存在隐藏的bug?所以对于突发通信不应该使用FIFO。
近来发现论坛里提问频率较高、问题也五花八门的问题之一就是串口通信问题,因此想在这里写点心得,也只是一点心得,对于网上很容易查到的信息,这里就不谈了。
问题一:缓冲区大小的问题。
现在绝大多数CPU都包含串口功能,同时也为串口配置了FIFO缓冲区,对于FIFO缓冲区的使用存在着些误区。
单就串口来说,通信也分为很多方式,缓冲区大小影响较大的有两种:突发通信和连续的数据流通信。突发通信的主要特点是:数据量小、持续时间短、通信发生时间不确定,通常的设备状态监控就属于这一类型。相对的数据流通信的特点是:数据量大、持续时间长等,如图像通信、音频采集等。
对于突发通信,应该不使用FIFO缓冲区,或者把FIFO大小设置为1。因为在如果把缓冲区大小设置为应该接收的数据的大小,那么发生通信错误如丢失数据时就不会产生中断,接收方会认为未发生通信事件,而发送方只能靠超时认为通信中断。这和接收到数据并判断出通信数据发生错误的性质是不同的,如果接收到数据我们就可以判断出发生错误的原因,如果接收不数据,那么怎么判断,硬件连接?FIFO设置?软件错误?软件存在隐藏的bug?所以对于突发通信不应该使用FIFO。