使用 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
posted @ 2021-04-11 13:19  派大海星  阅读(663)  评论(0编辑  收藏  举报