导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    【模块第二弹】在哪吒D1上用IIC驱动OLED屏幕,实现系统资源监视器

    MR Series
    3
    7
    2557
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • BedRock
      BedRock LV 6 最后由 Kirin 编辑

      前言

      最近正在为”毛胚车“改造计划准备模块,昨天准备了"旋转旺仔"需要的步进电机。今天成功驱动IIC OLED屏幕(虽然目前不知道干什么)那就暂且当作一个资源监视器吧。

      效果图

      05ad8989-5ff1-48f7-a788-02703a1e0d16-lADPD26eQGc9MXzNBQDNA8A_960_1280.jpg
      15e50a27-3a99-4f55-973c-c477f332fe01-lADPD4BhuZ8dsYTNBQDNA8A_960_1280.jpg

      代码
      oled_sys.tar.gz

      说明:
      由于我们需要使用IIC 接口,查看哪吒原理图发现:b08cfe6d-9ee1-4441-9851-f45e9d7165ac-image.png
      哪吒中印出来的IIC 接口为 TWI2 即 IIC2 (值得一提的是在AllWinner TWI 就是 IIC接口)
      查看Tina中/dev 目录也只发现了 IIC 2
      cf937a56-d6cb-45b4-9ac0-15ec84917904-image.png
      然后再试试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的文档,发现有如下代码:
      c6793bff-f897-4568-972e-10e1301290bf-image.png

      #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 ,理论可行,开干。。😳 😳 😳

      。。。。。。过程省略,哈哈哈哈哈

      然后得到我在上面上传的压缩包。😀 😀

      1 条回复 最后回复 回复 引用 分享 0
      • BedRock
        BedRock LV 6 最后由 编辑

        96028b25-9479-46ca-ad71-8f7e4c0a61f3-image.png
        代码的地方不是很明显,截图提示一下。

        附带一下编译教程(一步到位)

        tar -zxvf oled_sys.tar.gz
        cd oled_sys/
        make -j4
        

        生成文件为 main 😀

        1 条回复 最后回复 回复 引用 分享 0
        • Kirin
          陈塘关李靖 LV 6 最后由 编辑

          牛逼 做不知道有什么用的东西,做自由而无用的灵魂👍

          1 条回复 最后回复 回复 引用 分享 0
          • U
            ubuntu LV 7 最后由 编辑

            在应用层 写屏?

            BedRock 1 条回复 最后回复 回复 引用 分享 0
            • BedRock
              BedRock LV 6 @ubuntu 最后由 编辑

              @ubuntu 在 【模块第二弹】在哪吒D1上用IIC驱动OLED屏幕,实现系统资源监视器 中说:

              在应用层 写屏?

              嗯嗯,会有什么问题吗

              U 1 条回复 最后回复 回复 引用 分享 0
              • U
                ubuntu LV 7 @BedRock 最后由 编辑

                @bedrock 也没啥问题,因为大家都是这么做,一般还是要做成 framebuffer驱动比较通用一点。

                BedRock 1 条回复 最后回复 回复 引用 分享 0
                • BedRock
                  BedRock LV 6 @ubuntu 最后由 编辑

                  @ubuntu 做frambuffer驱动确实通用了🤡
                  OLED屏幕不用太讲究吧

                  1 条回复 最后回复 回复 引用 分享 0
                  • 1 / 1
                  • First post
                    Last post

                  Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

                  行为准则 | 用户协议 | 隐私权政策