不同芯片和设备之间,如何稳定的,安全的通信?

来源:互联网 发布:window系统编程pdf 编辑:程序博客网 时间:2024/05/16 04:54

今天我教大家一种技能,不同芯片和设备之间,如何稳定的,安全的通信?就以我们一般智能产品为例,给大家讲一下!

 

 

现在的智能产品,大多和手机配套使用的,设备就是我们做的产品,比如智能电锁,检测器,控制设备等等。这个设备要使用,得有两层通信,一个是设备和手机之间的通信,一个是设备之间两款芯片之间的通信,那就是三个对象之间的通信。这个设备要实现自己的功能,一是要实现通信,二还要完成自己的逻辑处理,比如实时采集环境数据,实时数据转换,驱动io等等。

上面说的这些,是我们嵌入式设计者必须考虑的问题,那如何解决这些问题,不让对象之间的通信出现错误,或者丢数据,或者影响设备控制处理逻辑。我们可以这样设计,做到这几点,就能解决上面的问题。

第一点,通信采用应答式的。比如手机发送一包数据给蓝牙,蓝牙芯片收到数据,处理之后,可以给手机发送一个处理结果,手机在收到这个结果之后,再发送下一包收据。如果在此通信过程中出现状况,通信失败了。那手机会收不到蓝牙的处理结果,那就做超时处理。

这里再说的稍微复杂一点的,手机发送一包数据给蓝牙,蓝牙收到数据之后,会透传给ARM芯片,ARM芯片收到命令,做处理,然后将处理结果返回给蓝牙芯片,蓝牙芯片再发送给手机。这才是一次比较常见的通信。

所以在我们写程序的时候,我们要做三个方面,一个方面是做发送数据模块,第二方面是做接收数据模块and命令处理模块,一般接收数据弄成中断接收。第三方面,主控制程序。主逻辑部分。互不干扰。很有逻辑。

第二点,通信过程,规定特定的通信协议。一般都是TLVC。说明如下图。


T(包头):不同的包头可以代表不同的设备,比如包头0xA5,代表的是主机给从机发送的命令,0x5A,代表的是从机给主机发送的命令。0x55,代表的是测试命令。现在对这个协议做一下说明:

T(命令):不同的命令可以完成不同的功能,比如我们要实现一个功能,功能就是走完一个过程,这个过程,分为好几个阶段,每个阶段可以当成一个命令。把命令走一遍,功能也就实现了。

L:  就是数据的长度。

V:  命令中携带的数据。

C:  对数据区的数据,做校验,保证数据的安全性。

 

第三点:是通信过程。设备间通信,主要的通信接口是UARTIIC,  SPIUSBBLE4.0等等。 今天以SPI为例说明一下,为了不丢失数据,我们做成中断接收数据。特别注意一点的是,在接收完一包数据之后,要处理这包数据的时候,一定要关闭关闭掉接收中断。在处理完数据之后,再将接收数据的使能打开。因为SPI在发送数据的时候,也是在接受数据。处理数据的时候,也可能会向外发送数据,如果此刻接收使能打开,那会进入接收中断。那就这个命令没有处理完,又接收到了乱数据。从而逻辑就乱了。

 

我们应该咋样写这段代码啦?我给大家举个例子。

比如我们现在使用的是ARM芯片,它和蓝牙芯片之间通过spi接口通信着。走的协议就是我上面说的协议。

 

初始化的时候,使能spi接收,在中断服务程序里面,接收到一包数据,然后rx_finish = 1。在主程序里面,做命令处理函数。命令处理函数执行的条件是if(rx_finish == 1)。在命令处理函数里面,先关闭接收中断,然后对长度 and命令and校验做一个判断,如果长度and命令and校验不对的话,做提示。如果都对,switch(cmd),根据不同的命令处理。然后再打开接收使能。

 

 

0 0
原创粉丝点击