6个版本 (1个稳定版)
1.0.0 | 2024年3月11日 |
---|---|
0.1.4 | 2023年6月14日 |
0.1.3 | 2020年7月13日 |
0.1.2 | 2020年3月27日 |
在嵌入式开发中排名第165
每月下载量22次
40KB
354 行代码
charlcd
一个Rust包,用于与主线Linux charlcd.c驱动程序交互。
或者说得更直接一些:一个用于在嵌入式Linux设备上正确交互HD44780 LCD屏幕的包。
演示
这些类型的照片在文档中到处都是,用于解释每个可用的函数的前后变化。请务必查看它们!
原理
许多开发者依赖用户空间库来与非常流行的HD44780 LCD屏幕交互,但这些实现缺乏适当的抽象,并且通常都重新实现了相同的通信协议来反复与屏幕交互。
如果你考虑到Linux内核可以提供的内容,这种方法似乎是完全错误的。确实,设备驱动程序的角色是从用户空间的角度正确抽象对硬件的访问。为此,Linux内核使用一个抽象机制来声明硬件:设备树。
在I2C GPIO扩展器后面的屏幕的设备树节点可能如下所示
&i2c0 {
status = "okay";
pcf8574a: i2c0@3f {
compatible = "nxp,pcf8574a";
reg = <0x3f>;
gpio-controller;
#gpio-cells = <2>;
};
};
auxdisplay: auxdisplay {
compatible = "hit,hd44780";
data-gpios = <&pcf8574a 4 GPIO_ACTIVE_HIGH>,
<&pcf8574a 5 GPIO_ACTIVE_HIGH>,
<&pcf8574a 6 GPIO_ACTIVE_HIGH>,
<&pcf8574a 7 GPIO_ACTIVE_HIGH>;
rs-gpios = <&pcf8574a 0 GPIO_ACTIVE_HIGH>;
rw-gpios = <&pcf8574a 1 GPIO_ACTIVE_HIGH>;
enable-gpios = <&pcf8574a 2 GPIO_ACTIVE_HIGH>;
backlight-gpios = <&pcf8574a 3 GPIO_ACTIVE_LOW>;
display-height-chars = <2>;
display-width-chars = <16>;
};
一旦设备树配置正确,charlcd驱动程序将创建一个charlcd
字符设备。
该库的作用是提供对字符设备条目的抽象,同时让内核驱动程序实现与屏幕的通信——而不是从头开始,使用ioctl通过/dev/i2c-*
,就像许多其他库所做的那样。
已知问题
charlcd驱动程序目前无法向用户空间报告屏幕尺寸。这通过直接查看设备树条目在库中得到缓解。
进一步发展
有关更多信息以及关于真实硬件的演示,请参阅这篇博客文章。
许可证
Apache v2.
依赖项
~115KB