4.2寸墨水屏电子价签改造记录——持续更新
来自某橙色购物软件,背面标签:BLOZI Made in China
MODEL:Endor
S/N:BZ45XXXXXXXXXXXXXXXXXXXX
总共买了俩,屏幕上都塑料膜都没撕掉,外观看上去也是新的。在某鱼买了一块24Pin墨水屏通用驱动板,顺便一起买了ESP8266 NodeMCU开发板。(感觉不够划算,我应该买ESP32,现在意识到8266虽然便宜但是没有蓝牙且GPIO数量太少了。)
来自某橙色购物软件,背面标签:BLOZI Made in China
MODEL:Endor
S/N:BZ45XXXXXXXXXXXXXXXXXXXX
总共买了俩,屏幕上都塑料膜都没撕掉,外观看上去也是新的。在某鱼买了一块24Pin墨水屏通用驱动板,顺便一起买了ESP8266 NodeMCU开发板。(感觉不够划算,我应该买ESP32,现在意识到8266虽然便宜但是没有蓝牙且GPIO数量太少了。)
这是我写的DS18B20用户态驱动
Goodspeed最近好像比较清闲,所以这位有点闲的同学跑来远程我的OrangePi Zero2 完成了一份正经的单总线驱动。实现后效果如下:
root@orangepizero2:~# cd /sys/bus/w1/devices/28-0721c061a6ac/
root@orangepizero2:/sys/bus/w1/devices/28-0721c061a6ac# ls
alarms eeprom_cmd hwmon power temperature
conv_time ext_power id resolution uevent
driver features name subsystem w1_slave
root@orangepizero2:/sys/bus/w1/devices/28-0721c061a6ac# cat w1_slave
bb 01 4b 46 7f ff 0c 10 74 : crc=74 YES
bb 01 4b 46 7f ff 0c 10 74 t=27687
显而易见大约27摄氏度,详细过程会在他的博客写好后在下方公开。(人比人气死人:)
给香橙派 Zero 2 适配 1-wire 总线————William Goodspeed
在向Goodspeed抱怨此事之前,香橙派官方4群里邹明燊先生也曾经写过一个dts文件,也是根据其他已经支持1-wire的设备简单改写的(如下),但是我通过orangepi-add-overlay xxx.dts 添加后会在日志中看到错误信息,即我上一篇文章里写被占用的哪些错误信息,并且经过测试dts生成的dtb文件没有正常工作。而Goodspeed提供的截图中可以看到,这个dts文件并没有写错,只是设置的GPIO不同。
/dts-v1/;
/plugin/;
/ {
compatible = "allwinner,sun50i-h616";
fragment@0 {
target = <&pio>;
__overlay__ {
w1_pins: w1_pins {
pins = "PC9";
function = "gpio_in";
};
};
};
fragment@1 {
target-path = "/";
__overlay__ {
onewire@0 {
compatible = "w1-gpio";
pinctrl-names = "default";
pinctrl-0 = <&w1_pins>;
gpios = <&pio 2 9 0>; /* PC9 */
status = "okay";
};
};
};
};
二者的主要不同在于Goodspeed是在 arch/arm64/boot/dts/allwinner/overlay/Makefile 中加入一行 sun50i-h616-w1-gpio.dtbo,make dtbs
让构建系统编译新的 overlay,而邹明燊先生试图让我直接通过orangepi-add-overlay将改写好的单总线支持dts文件编译并自动添加到overlay路径。
这两者方法不太一样,Goodspeed的方法是从orange-pi-5.16-sunxi64 linux分支源码中自动编译生成dtbo文件,而邹明燊先生是自己写dts从写好的dts去编译得到dtbo文件。但是不知道为什么后者无法生效,从内核日志里的报错看是和pinctl冲突了,也就是说比pinctl抢先占用了pin,但是理论上应该先由pinctl统一管理,驱动应该基于pinctl运行。从这点看,由linux分支源码去自动编译可能会得以避开这一问题,但是具体避开抢占问题的原理就不得而知了,我也不打算深究。
关于linux设备树,请参考如下内容深入浅出理解Linux设备树(DTS)
Dts:DTS即Device Tree Source,是一个文本形式的文件,用于描述硬件信息。一般都是固定信息,无法变更,无法overlay。
Dtsi:可以理解为dts的公共部分,添加、变更非常灵活。Dtsi包含在dts中。
Dtb:Dtb编译出来的二进制
Dtbo:Overlay编译出来的二进制
dtbo-base:指定overlay是以哪个dtb为base来覆盖的。
Node:树的节点
Property:属性