【模块第二弹】在哪吒D1上用IIC驱动OLED屏幕,实现系统资源监视器
-
前言
最近正在为”毛胚车“改造计划准备模块,昨天准备了"旋转旺仔"需要的步进电机。今天成功驱动IIC OLED屏幕(虽然目前不知道干什么)那就暂且当作一个资源监视器吧。
效果图
说明:
由于我们需要使用IIC 接口,查看哪吒原理图发现:
哪吒中印出来的IIC 接口为 TWI2 即 IIC2 (值得一提的是在AllWinner TWI 就是 IIC接口)
查看Tina中/dev 目录也只发现了 IIC 2
然后再试试iic 相关的指令,此时插上OLED 屏幕进行扫描:root@TinaLinux:/# i2cdetect -y 2 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- UU -- -- -- 3c -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
可以看到它已经检测到我们的OLED设备了,该设备地址为
0x3c
。
知道了这些,我们就知道了 哪吒 是能够连接上他,并且驱动它的,那么下一步就是如何驱动的问题。
查看Tina Linux 关于IIC的文档,发现有如下代码:
#include <sys/ioctl.h> #include <fcntl.h> #include <linux/i2c-dev.h> #include <linux/i2c.h> #define CHIP "/dev/i2c-1" #define CHIP_ADDR 0x50 int main() { unsigned char rddata; unsigned char rdaddr[2] = {0, 0}; /* 将要读取的数据在芯片中的偏移量 */ unsigned char wrbuf[3] = {0, 0, 0x3c}; /* 要写的数据,头两字节为偏移量 */ printf("hello, this is i2c tester\n"); int fd = open(CHIP, O_RDWR); if (fd < 0) { printf("open "CHIP"failed\n"); goto exit; } if (ioctl(fd, I2C_SLAVE_FORCE, CHIP_ADDR) < 0) { /* 设置芯片地址 */ printf("oictl:set slave address failed\n"); goto close; } printf("input a char you want to write to E2PROM\n"); wrbuf[2] = getchar(); printf("write return:%d, write data:%x\n", write(fd, wrbuf, 3), wrbuf[2]); sleep(1); printf("write address return: %d\n",write(fd, rdaddr, 2)); /* 读取之前首先设置读取的偏移 量 */ printf("read data return:%d\n", read(fd, &rddata, 1)); printf("rddata: %c\n", rddata); close(fd); exit: return 0; }
该代码向我们演示了操作IIC设备的具体步骤,总结如下:
- 打开 /dev/i2c-* 节点
- 使用ioctl 设置从设备地址
- 使用 write or read 发送 or 读取数据
步骤我们知道了,下一步就是,驱动起来这块屏幕,使用单片机驱动这块屏幕的例程比较多,网上百度搜索随时就能搜到。那么,我们要做的修改就是需要将 IIC_WriteByte() 修改成再Tina 中对IIC设备进行写入数据的方法。并在初始化的时候打开设备节点,进行操作。
OK ,理论可行,开干。。
。。。。。。过程省略,哈哈哈哈哈
然后得到我在上面上传的压缩包。
-
代码的地方不是很明显,截图提示一下。附带一下编译教程(一步到位)
tar -zxvf oled_sys.tar.gz cd oled_sys/ make -j4
生成文件为 main
-
牛逼 做不知道有什么用的东西,做自由而无用的灵魂
-
在应用层 写屏?
-
-
@bedrock 也没啥问题,因为大家都是这么做,一般还是要做成 framebuffer驱动比较通用一点。
-
@ubuntu 做frambuffer驱动确实通用了
OLED屏幕不用太讲究吧
Copyright © 2023 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号