作为无人机方面做嵌入式编写的飞控总结1-基本协议驱动介绍1

基本的驱动,要算标准的串口,iic和spi协议不可缺席;

1 作为单片机初学者必备知识点和重要知识点,在linux系统编成之中依然还发挥很大作用,因为这三个协议使用的是在太多了;

首先废话不多说,

协议调试工具,用过两个不同的逻辑分析仪,一个是金沙滩电子工作室的,一个是周立功的,各位道友可以上淘宝搜索;

如果您不屑使用逻辑分析,同时又有良好的示波器,用的习惯就好;不过协议初学者的调试还是建议使用逻辑分析仪;

其次,因为有很多非标准协议,所以先搞明白清楚标准的协议的时序关系,再去分析会更快;

    比如,我在调试飞控的遥控器的时候使用的sbus协议--它是一个很另类的串口协议,串口配置为波特率100kbps8位数据,偶校验(even)2位停止位,无流控

想学习的朋友,可看连接:http://www.eefocus.com/taogashi/blog/14-05/303577_f140d.html

    还有如iic协议,如果你调试smbus协议的时候,会发现它根iic兼容,但是会比iic更苛刻。

    还有,SPI 是一种高速的、全双工、同步通信总线,标准的 SPI也仅仅使用4个引脚,标准的 SPI 是 4 根线,们也可以用 3 根线的 SPI 或者 2 根线的 SPI 进行通信。比如主机只给从机发送命令,从机不需要回复数据的时候,那么 MISO 就可以不要;而在主机只读取从机的数据,不需要给从机发送指令的时候,那 MOSI 就可以不要;当一个主机一个从机的时候,从机的片选有时可以固定为有效电平而一直处于使能状态,那么 SSEL 就可以不要;此时如果再加上主机只给从机发送数据,那么 SSEL 和 MISO 都可以不要;如果主机只读取从机送来的数据,SSEL 和 MOSI 都可以不要;

2.串口


图中,GND 表示单片机系统电源的参考地,TXD 是串行发送引脚,RXD 是串行接收引

脚。两个单片机之间要通信,首先电源基准得一样,所以我们要把两个单片机的 GND 相互
连接起来,然后单片机 1 的 TXD 引脚接到单片机 2 的 RXD 引脚上,即此路为单片机 1 发送
而单片机 2 接收的通道,单片机 1 的 RXD 引脚接到单片机 2 的 TXD 引脚上,即此路为单片
机 2 发送而单片机 1 接收的通道。这个示意图就体现了两个单片机相互收发信息的过程。
当单片机 1 想给单片机 2 发送数据时,比如发送一个 0xE4 这个数据,用二进制形式表
示就是 0b11100100,在 UART 通信过程中,是低位先发,高位后发的原则,那么就让 TXD
首先拉低电平,持续一段时间,发送一位 0,然后继续拉低,再持续一段时间,又发送了一
位 0,然后拉高电平,持续一段时间,发了一位 1……一直到把 8 位二进制数字 0b11100100

全部发送完毕。这里就涉及到了一个问题,就是持续的这“一段时间”到底是多久?由此便


eg:


2.I2C

UART 属于异步通信,比如电脑发送给单片机,电脑只负责把数据通过TXD 发送出来即可,接收数据是单片机自己的事情。

而 I 2 C 属于同步通信,SCL 时钟线负责收发双方的时钟节拍,SDA 数据线负责传输数据。I 2 C 的发送方和接收方都以 SCL 这个时钟节拍为基准进行数据的发送和接收

UART 通信多用于板间通信,比如单片机和电脑,这个设备和另外一个设备之间的通信。而 I 2 C 多用于板内通信;

 UART 串行通信的时候,通信流程分为起始位、数据位、停止位这三部分,同理在 I 2 C 中也有起始信号、数据传输和停止信号;


起始信号:UART 通信是从一直持续的高电平出现一个低电平标志起始位;而 I 2 C 通信的起始信号的定义是 SCL 为高电平期间,SDA 由高电平向低电平变化产生一个下降沿,表示起始信号,如图 14-3 中的 Start 部分所示。

数据传输首先,UART 是低位在前,高位在后;而 I 2 C 通信是高位在前,低位在后。,UART 通信数据位是固定长度,波特率分之一,一位一位固定时间发送完毕就可以了。而 I 2 C 没有固定波特率,但是有时序的要求,要求当 SCL 在低电平的时候,SDA 允许变化,也就是说,发送方必须先保持 SCL 是低电平,才可以改变数据线 SDA,输出要发送的当前数据的一位;而当 SCL 在高电平的时候,SDA 绝对不可以变化,因为这个时候,接收方要来读取当前 SDA 的电平信号是 0 还是 1,因此要保证 SDA 的稳定,如图 14-3 中的每一位数据的变化,都是在 SCL 的低电平位置。8 位数据位后边跟着的是一位应答位,应答位我们后边还要具体介绍。(低读取高确认);

停止信号:UART 通信的停止位是一位固定的高电平信号;而 I 2 C 通信停止信号的定义是 SCL 为高电平期间,SDA 由低电平向高电平变化产生一个上升沿,表示结束信号,如图14-3 中的 Stop 部分所示。

3.SPI

SPI 是英语 Serial Peripheral Interface 的缩写,顾名思义就是串行外围设备接口。SPI 是一种高速的、全双工、同步通信总线,标准的 SPI也仅仅使用4个引脚,常用于单片机和EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信。SPI 通信原理比 I 2 C 要简单,它主要是主从方式通信,这种模式通常只有一个主机和一个或者多个从机,标准的 SPI 是 4 根线,分别是 SSEL(片选,也写作 SCS)、SCLK(时钟,也写作 SCK)、MOSI(主机输出从机输入Master Output/Slave Input)和 MISO(主机输入从机输出 Master Input/Slave Output)。

SSEL:从设备片选使能信号。如果从设备是低电平使能的话,当拉低这个引脚后,从设备就会被选中,主机和这个被选中的从机进行通信。
SCLK:时钟信号,由主机产生,和 I 2 C 通信的 SCL 有点类似。
MOSI:主机给从机发送指令或者数据的通道。

MISO:主机读取从机的状态或者数据的通道。

4线和3线或2线的SPI说明:

比如主机只给从机发送命令,从机不需要回复数据的时候,那么 MISO 就可以不要;而在主机只读取从机的数据,不需要给从机发送指令的时候,那 MOSI 就可以不要;当一个主机一个从机的时候,从机的片选有时可以固定为有效电平而一直处于使能状态,那么 SSEL 就可以不要;此时如果再加上主机只给从机发送数据,那么 SSEL 和 MISO 都可以不要;如果主机只读取从机送来的数据,SSEL 和 MOSI 都可以不要。3 线和 2 线的 SPI 大家要知道怎么回事,实际使用也是有应用的,但是当我们提及 SPI的时候,一般都是指标准 SPI,都是指 4 根线的这种形式;

SPI的读写数据时序的过程中,有四种模式

两个名词:CPOL: Clock Polarity,就是时钟的极性;  CPHA: Clock Phase,就是时钟的相位 ;(确认啥时候进行读取和确认,iic是低读取高确认,spi需要进行设置确认)



时序上,SPI 是不是比 I 2 C 要简单的多?没有了起始、停止和应答,UART 和 SPI 在通信的时候,只负责通信,不管是否通信成功,而 I 2 C 却要通过应答信息来获取通信成功失败的信息,所以相对来说,UART 和 SPI 的时序都要比 I 2 C 简单一些

4.NEC  协议

NEC 协议的数据格式包括了引导码、用户码、用户码(或者用户码反码)、按键键码和键码反码,最后一个停止位。停止位主要起隔离作用,一般不进行判断,编程时我们也不予理会。其中数据编码总共是 4 个字节 32 位,如图 16-7 所示。第一个字节是用户码,第二个字节可能也是用户码,或者是用户码的反码,具体由生产商决定,第三个字节就是当前按键的键数据码,而第四个字节是键数据码的反码,可用于对数据的纠错;


这个 NEC 协议,表示数据的方式不像我们之前学过的比如 UART 那样直观,而是每一
位数据本身也需要进行编码,编码后再进行载波调制。

引导码:

9ms 的载波+4.5ms 的空闲。比特值“0”:560us 的载波+560us 的空闲。比特值“1”:560us 的载波+1.68ms 的空闲



猜你喜欢

转载自blog.csdn.net/xiaoxilang/article/details/80308316