zoukankan      html  css  js  c++  java
  • 使用 Shell 调试 I2C 设备

    概述

    板:hi3516ev200
    oled:连接I2C2,Pin30(i2c2_scl),Pin31(i2c2_sda)

    寄存器

    Pin I2C2_SCL IO Config Register
    地址0x112C003C,默认值0x1C00,当bit[3:0]为0x01时使用i2c功能。

    Pin I2C2_SDA IO Config Register
    地址0x112C0038,默认值0x1C00,当bit[3:0]为0x01时使用i2c功能。

    功能配置

    配置I2C2_SCL管脚

    # devmem 0x112C003C
    0x00001C00
    # devmem 0x112C003C 32 0x1C01
    

    配置I2C2_SDA管脚

    # devmem 0x112C0038
    0x00001C00
    # devmem 0x112C0038 32 0x1C01
    

    调试命令

    检测系统上的i2c总线

    # i2cdetect  -l
    i2c-1   i2c    hibvt-i2c       I2C adapter
    i2c-2   i2c    hibvt-i2c       I2C adapter
    i2c-0   i2c    hibvt-i2c       I2C adapter
    

    检测i2c总线上挂载的器件

    # i2cdetect -y -r 2
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --
    

    查看器件所有寄存器的值

    # i2cdump -f -y 2 0x3c
    

    设置器件寄存器值(设置i2c-2总线上0x3c器件的0x00寄存器值为0xAE)

    # i2cset -f -y 2 0x3c 0x00 0xAE
    

    OLED调试脚本

    写命令与数据

    Wc(){
        i2cset -f -y 2 0x3c 0x00 $1
    }
    
    Wd(){
        i2cset -f -y 2 0x3c 0x40 $1
    }
    

    设备初始化

    oledInit(){
        Wc 0xAE
        Wc 0x20
        Wc 0x10
        Wc 0xb0
        Wc 0xc8
        Wc 0x00
        Wc 0x10
        Wc 0x40
        Wc 0x81
        Wc 0xff
        Wc 0xa1
        Wc 0xa6
        Wc 0xa8
        Wc 0x3f
        Wc 0xa4
        Wc 0xd3
        Wc 0x00
        Wc 0xd5
        Wc 0xf0
        Wc 0xd9
        Wc 0x22
        Wc 0xda
        Wc 0x12
        Wc 0xdb
        Wc 0x20
        Wc 0x8d
        Wc 0x14
        Wc 0xaf
    }
    

    设置坐标位置

    oledSetPos(){
        y=$1
        x=$2
        Wc $((0xb0 + $y))
        Wc $(((($x & 0xf0) >> 4) | 0x10))
        Wc $((($x & 0x0f) | 0x01))
    }
    

    清除屏幕

    oledClear(){
        for((i=1;i<=10;i++))
        do   
            Wc $((0xb0 + $i))
    	Wc 0x00
    	Wc 0x10
    	for((n = 0; n < 128; n++))
            do
    		Wd 0x00
    	done
        done  
    }
    

    显示字符

    oledShow(){
        Wd 0x00; Wd 0x3E; Wd 0x41; Wd 0x41; Wd 0x41; Wd 0x3E
        Wd 0x00; Wd 0x7F; Wd 0x08; Wd 0x14; Wd 0x22; Wd 0x41
    }
    

    程序逻辑

    oledInit
    oledClear
    oledSetPos 1 1
    oledShow
    
  • 相关阅读:
    数据库知识点
    hibernate5--主键生成策略
    hibernate5学习知识点小结
    hibernate5小案例讲解
    hibernate5新手跳过的坑
    strut2_struts.xml文件配置知识点汇集
    在使用ElementUI的JSP项目中,集成富文本编辑器QuillEditor
    如何在JSP中使用VUE/elementUI
    Java定时任务--Timer和TimerTask
    SecureFX的破解问题
  • 原文地址:https://www.cnblogs.com/llil/p/14643593.html
Copyright © 2011-2022 走看看