我必须在I²上使用SSD1306哪些命令;C

我必须在I²上使用SSD1306哪些命令;C,c,linux,arduino,raspberry-pi,i2c,C,Linux,Arduino,Raspberry Pi,I2c,我想为SSD1306创建一个简单的linux驱动程序,我已经通过I²C连接到我的Raspberry Pi 在开始编码之前,我想了解设备以及我必须发送的命令。我使用linux的i2c工具来测试我的命令。我研究了一些Arduino项目和SSD1306的数据表,但我只能在命令行上重新创建一些命令: 初始化设备:i2cset-y 1 0x3c 0xAE 0x20 0x10 0xb0 0xc8 0x00 0x10 0x40 0x81 0x7f 0xa1 0xa6 0xa8 0x3f 0xa4 0xd3 0

我想为SSD1306创建一个简单的linux驱动程序,我已经通过I²C连接到我的Raspberry Pi

在开始编码之前,我想了解设备以及我必须发送的命令。我使用linux的i2c工具来测试我的命令。我研究了一些Arduino项目和SSD1306的数据表,但我只能在命令行上重新创建一些命令:

初始化设备:
i2cset-y 1 0x3c 0xAE 0x20 0x10 0xb0 0xc8 0x00 0x10 0x40 0x81 0x7f 0xa1 0xa6 0xa8 0x3f 0xa4 0xd3 0x00 0xd5 0xf0 0xd9 0x22 0xda 0x12 0xdb 0x20 0x8d 0x14 0xaf i

将数据发送到设备的内存:
i2cset-y 1 0x3c 0x40 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF i
这将从当前位置向右填充一些像素

跳转到左上角像素:
i2cset-y 1 0x3c 0xb0 0x00 0x10 i
这并不总是奏效:(

0x3c是我的SSD1306设备的地址

如果有人能告诉我更多的命令,或者知道我在哪里可以找到一个好的例子或者带注释的教程,我会很高兴

谢谢


p0kR

以下是一个扩展示例,灵感来自:


它非常慢,但可以正常工作。使用128x32 oled display+raspberry pi 1进行测试。

所有命令都应该列在数据表中。如果其中一些命令不存在,则它们可能不存在,或者您的数据表不好。关于在何处查找显示器手册、教程或其他非现场资源的问题在这里不属于主题。我有一个数据表,b但是我找不到正确的命令。没有人要求提供数据表和一个很好的示例/教程,我要求的也可能是关于同一个设备的一个完全不同的问题的答案。也许你找不到它,因为我感兴趣的部分只是其中的一小部分。这看起来和我正在寻找的完全一样非常感谢你。我明天就试试
function display_off() {
i2cset -y 0 0x3c 0x00 0xAE  # Display OFF (sleep mode)
sleep 0.1
}

function init_display() {
i2cset -y 0 0x3c 0x00 0xA8  # Set Multiplex Ratio
i2cset -y 0 0x3c 0x00 0x3F    # value
i2cset -y 0 0x3c 0x00 0xD3  # Set Display Offset
i2cset -y 0 0x3c 0x00 0x00    # no vertical shift
i2cset -y 0 0x3c 0x00 0x40  # Set Display Start Line to 000000b
i2cset -y 0 0x3c 0x00 0xA1  # Set Segment Re-map, column address 127 ismapped to SEG0
i2cset -y 0 0x3c 0x00 0xC8    # Set COM Output Scan Direction, remapped mode. Scan from COM7 to COM0
#i2cset -y 0 0x3c 0x00 0xC0   # Set COM Output Scan Direction, remapped mode. Scan from COM7 to COM0
i2cset -y 0 0x3c 0x00 0xDA  # Set COM Pins Hardware Configuration
#i2cset -y 0 0x3c 0x00 0x12   # Alternative COM pin configuration, Disable COM Left/Right remap
#i2cset -y 0 0x3c 0x00 0x2    # Sequential COM pin configuration,  Disable COM Left/Right remap
#i2cset -y 0 0x3c 0x00 0x22   # Sequential COM pin configuration,  Enable Left/Right remap  (8pixels height)
i2cset -y 0 0x3c 0x00 0x32    # Alternative COM pin configuration, Enable Left/Right remap   (4pixels height)
#i2cset -y 0 0x3c 0x00 0x81 # Set Contrast Control
#i2cset -y 0 0x3c 0x00 0xCF   # value, 0x7F max.
i2cset -y 0 0x3c 0x00 0xA4  # display RAM content
i2cset -y 0 0x3c 0x00 0xA6  # non-inverting display mode - black dots on white background
i2cset -y 0 0x3c 0x00 0xD5  # Set Display Clock (Divide Ratio/Oscillator Frequency)
i2cset -y 0 0x3c 0x00 0x80    # max fequency, no divide ratio
i2cset -y 0 0x3c 0x00 0x8D  # Charge Pump Setting
i2cset -y 0 0x3c 0x00 0x14    # enable charge pump
i2cset -y 0 0x3c 0x00 0x20  # page addressing mode
i2cset -y 0 0x3c 0x00 0x20    # horizontal addressing mode
#i2cset -y 0 0x3c 0x00 0x21   # vertical addressing mode
#i2cset -y 0 0x3c 0x00 0x22   # page addressing mode
}

function display_on() {
i2cset -y 0 0x3c 0x00 0xAF  # Display ON (normal mode)
sleep 0.001
}

function reset_cursor() {
i2cset -y 0 0x3c 0x00 0x21  # set column address
i2cset -y 0 0x3c 0x00 0x00  #   set start address
i2cset -y 0 0x3c 0x00 0x7F  #   set end address (127 max)
i2cset -y 0 0x3c 0x00 0x22  # set page address
i2cset -y 0 0x3c 0x00 0x00  #   set start address
i2cset -y 0 0x3c 0x00 0x07  #   set end address (7 max)
}

display_off
init_display
display_on
reset_cursor

# fill screen
for i in $(seq 1024)
do
   i2cset -y 0 0x3c 0x40 0xff
done

reset_cursor

# clear screen
for i in $(seq 1024)
do
   i2cset -y 0 0x3c 0x40 0x0
done

reset_cursor

# draw a pattern
for i in $(seq 146)
do
    for i in 1 4 16 64 16 4 1
    do
        i2cset -y 0 0x3c 0x40 $i
    done
done