• 使用 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
    
  • 相关阅读:
    书单
    parzen 窗的matlab实现
    Oracle-07
    图片加载不出来
    省市区三表建立及数据插入
    a链接与button按钮混用
    省市区三级联动,获取地区编号,JSON格式
    纯JS省市区三级联动
    JDK与JRE的区别
    web-03-jQuery
  • 原文地址:https://www.cnblogs.com/llil/p/14643593.html
Copyright © 2020-2023  润新知