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
    
  • 相关阅读:
    Java实现 LeetCode 432 全 O(1) 的数据结构
    Java实现 LeetCode 432 全 O(1) 的数据结构
    Makefile 自动生成依赖
    比较详细的利用虚拟机对SD卡FAT32+EXT4+Ext4分区图解教程
    STM32F0308开发环境的选择--CooCox CoIDE篇
    linux下包管理命令yum与apt-get以及开发环境配置
    裸机编程与OS环境编程的有关思考
    Eclipse C/C++环境配置
    Linux Eclipse代码提示功能设置(Java & C/C++)
    Linux下高效编写Shell——shell特殊字符汇总
  • 原文地址:https://www.cnblogs.com/llil/p/14643593.html
Copyright © 2011-2022 走看看