嵌入式linux系统驱动开发总结02

自己学习总结用,有些乱,勿怪

1、Linux 设备树

设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(DeviceTree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、IIC 接口上接了哪些设备、SPI 接口上接了哪些设备等等,如

嵌入式linux系统驱动开发总结02

树的主干就是系统总线,IIC 控制器、GPIO 控制器、SPI 控制器等都是接到系统主线上的分支IIC 控制器有分为 IIC1 和 IIC2 两种,其中 IIC1 上接了 FT5206 和 AT24C02这两个 IIC 设备,IIC2 上只接了 MPU6050 这个设备。

设备树源文件扩展名为.dts,但是我们在前面移植 Linux 的时候却一直在使用.dtb 文件,那么 DTS 和 DTB 这两个文件是什么关系呢?DTS 是设备树源码文件,DTB 是将DTS 编译以后得到的二进制文件。将.c 文件编译为.o 需要用到 gcc 编译器,那么将.dts 编译为.dtb需要什么工具呢?需要用到 DTC 工具!DTC 工具源码在 Linux 内核的 scripts/dtc 目录下

2、RPC框架

RPC是远程过程调用(Remote Procedure Call)的缩写形式。SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。

进程间通信(IPC)是在多任务操作系统或联网的计算机之间运行的程序和进程所用的通信技术。有两种类型的进程间通信(IPC)。

本地过程调用(LPC)LPC用在多任务操作系统中,使得同时运行的任务能互相会话。这些任务共享内存空间使任务同步和互相发送信息。远程过程调用(RPC)RPC类似于LPC,只是在网上工作。RPC开始是出现在Sun微系统公司和HP公司的运行UNⅨ操作系统的计算机中。

  1. 首先客户端需要告诉服务器,需要调用的函数,这里函数和进程ID存在一个映射,客户端远程调用时,需要查一下函数,找到对应的ID,然后执行函数的代码。
  2. 客户端需要把本地参数传给远程函数,本地调用的过程中,直接压栈即可,但是在远程调用过程中不再同一个内存里,无法直接传递函数的参数,因此需要客户端把参数转换成字节流,传给服务端,然后服务端将字节流转换成自身能读取的格式,是一个序列化和反序列化的过程。
    3.数据准备好了之后,如何进行传输?网络传输层需要把调用的ID和序列化后的参数传给服务端,然后把计算好的结果序列化传给客户端,因此TCP层即可完成上述过程,gRPC中采用的是HTTP2协议。
嵌入式linux系统驱动开发总结02


2、74HC165的使用

74HC165是并行输入串行输出的逻辑芯片,一般用于扩展输入的IO口。使用电路如下:

嵌入式linux系统驱动开发总结02

外部可以接8个输入,然后通过3个口与单片机相连。3个口的功能为:

PL:输出使能;

CP:时钟线;

Q7:数据输出。

看一下74HC165的真值表:

嵌入式linux系统驱动开发总结02

可见,当PL为低时,165通过D0到D7从外部读取输入,读取到一个8位的寄存器中。

然后当PL拉高时,CP给一个上升沿,8位寄存器中的值就通过Q7输出一位。

再看时序:

嵌入式linux系统驱动开发总结02

上图中的CE是时钟输出使能(芯片15脚),要把它拉低,时钟信号才有效。不用该功能直接接GND即可。

从上图可看到,当PL拉低时,165从外部采集信号,此时D7=H,D6=H,D5=L...,然后把PL拉高,Q7输出D7的值

因为此时CE被拉高,所以CP的上升沿被屏蔽了,可是一旦CE拉低,读到CP的上升沿,Q7的输出值就往后移一位,此时输出D6的值。再读到一个上升沿,又继续往后移一位。。。

嵌入式linux系统驱动开发总结02

一片165可以扩展出8个输入口,如果不够可以再加无数个165,而且都只需要3个IO口与单片机连接。这就是165的级联使用。比如3片级联:

嵌入式linux系统驱动开发总结02

可以看到第二片165的Q7接到了第一片的DS,第三片165的Q7接到了第二片的DS。原理如下

嵌入式linux系统驱动开发总结02

程序实例:

嵌入式linux系统驱动开发总结02

当输入端(SH/LD)为低:

  从D0到D7口输入的并行数据将被异步地读取进寄存器内,然后通过DS输出。

  ②当输入端(SH/LD)为高:

  数据将从DS(10引脚)输入端串行进入寄存器,在每个时钟脉冲的上升沿向右移动一位。利用这种特性,只要把Q7输出绑定到下一级的DS输入,即可实现并转串扩展。(在我们的开发板,DS端是悬空的),通过时钟管脚,上升沿有效,在每个时钟脉冲的上升沿向右移动一位(D0→D1→D2→D3→…→D7)一位一位将数据往外读出和移出。

嵌入式linux系统驱动开发总结02

4、74HC595时序图详解:

嵌入式linux系统驱动开发总结02

74HC595是串行输入并行/串行输出的移位锁存器。SHCP是移位脉冲,前沿(上升沿)有效,STCP是锁存脉冲,前沿有效,DS是输入信号,MR(低电平有效)清零,OE(低电平有效)输出使能,Q0-Q7并行输出,Q7S串行输出。

  在移位脉冲SHCP的上升沿作用下,输入信号DS在芯片内部进行八次移位,STCP负责锁存,把移位信号保持在芯片内部,OE低电平时,移位后的信号从Q0-Q7八个脚并行输出,同时这八个脚上的信号也以串行的方式从Q7S脚依次输出。该脚输出的信号可作为下一个595的输入信号,理论上讲,可实现无限级联。


嵌入式linux系统驱动开发总结02


嵌入式linux系统驱动开发总结02

如上图:SHCP是移位脉冲,前沿(上升沿)有效,在移位脉冲SHCP的上升沿作用下,输入信号DS在芯片内部进行八次移位,上升沿有效,STCP负责锁存,把移位信号保持在芯片内部,STCP是锁存脉冲,前沿有效

展开阅读全文

页面更新:2024-03-19

标签:拉高   脉冲   时钟   服务端   控制器   嵌入式   函数   客户端   芯片   进程   信号   参数   过程   文件   数据   设备   系统   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top