IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 白话通过系统来访问硬件 -> 正文阅读

[嵌入式]白话通过系统来访问硬件

白话通过系统来访问硬件

对于一个产品,它有连接若干种硬件,包括gpio,串行口,usb 等, 我们怎么访问它?
通过系统接口, 系统程序已经为我们提供了驱动.
系统接口是啥样子的? 通常是一个文件, 当然这是一种比较特殊的文件. 我们通过这种访问文件的方式
来访问硬件设备. 只要知道这个文件的名称就可以了, 当然,也可能需要知道它的控制属性,用ioctl 来改变
它的一些行为.

有一种设备是固定的, 例如串行口设备 /dev/ttyS0 等等.
开机后,这个设备文件就在那, 你可以按照默认的属性读写它.

还有一种设备, 其设备名不一定以/dev 开头, 例如控制器上的某个引脚吧.
我们发命令把它拉高或拉低. 如果用汇编,大概就是写个0或1到某个寄存器bit
但是有了系统,我们应用程序就没有权利直接访问外设了, 而且也没有人再去记这个引脚对应什么地址的第几bit位.
怎么操作呢?
这个引脚,应该会对应到某个文件上, 向这个文件写1就相当于拉高, 写0就是拉低.
所以你不需要记地址了,而需要记文件路径.
如果在命令行下操作, echo 一个数到设备文件,就相当于写数到引脚了.

如果用程序怎样实现呢.用程序用手工是一样的.
我们以M6g2c 来举例说明, 目的: 把68号引脚置位为低. 其它的计算机系统可不一定这样.
M6g2c 的引脚是多功能的, 所以
第一步要把68号引脚设为io引脚. 怎么告诉系统呢?
向"/sys/class/gpio/export" 这个文件写 "68" 字符串就可以了.

且慢: "/sys/class/gpio/export" 这是个什么东西?
这是个系统文件, linux 下一切皆文件的思想, 你想跟系统打交道,就通过文件了.
你只要想把那个引脚设为io功能而不是其它的专有功能,就向它写引脚号就好了.

第二步: 告诉系统这个引脚(68号引脚)要用作输出功能,而不是输入功能,怎么做呢?
你需要向 "/sys/class/gpio/gpio68/direction" 文件写入 "out" 字符串.

且慢: 路径中的gpio68 跟68号引脚是什么关系? 一一对应吗? 58就对应gpio58?
对,就是这么一一对应的, 只不过当你向"/sys/class/gpio/export 写了"58" 字符串时,
系统就给你创建了/sys/class/gpio/gpio58 目录,里边包含着若干文件.
看起来还是挺好玩的,嗯! 跟系统对话, 用字符串!

第三步: 准备工作都已具备, 把数值写到68号引脚上,怎么做呢.
向"/sys/class/gpio/gpio68/value" 写数值0或1.
还真的是一切皆文件, 呵呵!

手敲就是echo, cat
程序就是fopen,fread,fwrite.

访问串行口,访问i2c,访问lcd(frame buffer), 访问spi, 大体上也都是这样的操作过程.
具体的文件名称是什么,以及如何控制属性等就需要具体的样例代码了,此处忽略.
大家都用过打印机吧, 对,把文件丢给打印机,它就给我们打印了, 等价于echo 文件内容
到打印机设备句柄, 不过用的是打印机默认属性. 打印机的属性肯定通过另外的文件或方式
设置,此处忽略,反正道理是相通的,可以想象一下. 这样就不怕和硬件打交道了.

且慢: 新到了一个设备,不能工作,没有驱动. 要让它工作起来. 啊,要写驱动啊? 那厂家
是干什么吃的, 先别自己写,没有资料你也写不成. 无驱不动,厂家肯定会有的.
你就是厂家, 不是新到了一个设备,而是把这个芯片挂到系统上,
那要看看了,是字符型设备,usb设备还是其它类型设备,通过什么总线挂的.
把芯片资料拿过来, 估计有人已经做过了吧,先查一下是不是可以借鉴.
路漫漫兮修远兮...

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 16:02:04  更:2021-11-15 16:03:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:16:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码