blob: c2982c1fae67f0793b5d6e267ca77cebd605c9d6 [file] [log] [blame]
Johann Fischer419f4b72018-07-19 18:11:50 +02001/*
2 * Copyright (c) 2018 Phytec Messtechnik GmbH
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7
8#ifndef __SSD1306_REGS_H__
9#define __SSD1306_REGS_H__
10
Marco Peterfd2087e2020-09-11 20:39:29 +020011/* All following bytes will contain commands */
12#define SSD1306_CONTROL_ALL_BYTES_CMD 0x00
13/* All following bytes will contain data */
14#define SSD1306_CONTROL_ALL_BYTES_DATA 0x40
15/* The next byte will contain a command */
Johann Fischer419f4b72018-07-19 18:11:50 +020016#define SSD1306_CONTROL_BYTE_CMD 0x80
Marco Peterfd2087e2020-09-11 20:39:29 +020017/* The next byte will contain data */
Johann Fischer419f4b72018-07-19 18:11:50 +020018#define SSD1306_CONTROL_BYTE_DATA 0xc0
19#define SSD1306_READ_STATUS_MASK 0xc0
20#define SSD1306_READ_STATUS_BUSY 0x80
21#define SSD1306_READ_STATUS_ON 0x40
22
23/*
24 * Fundamental Command Table
25 */
26#define SSD1306_SET_CONTRAST_CTRL 0x81 /* double byte command */
27
28#define SSD1306_SET_ENTIRE_DISPLAY_OFF 0xa4
29#define SSD1306_SET_ENTIRE_DISPLAY_ON 0xa5
30
Greter Raffaelcbec4752024-02-02 13:33:06 +000031/* RAM data of 1 indicates an "ON" pixel */
Johann Fischer419f4b72018-07-19 18:11:50 +020032#define SSD1306_SET_NORMAL_DISPLAY 0xa6
Greter Raffaelcbec4752024-02-02 13:33:06 +000033/* RAM data of 0 indicates an "ON" pixel */
Johann Fischer419f4b72018-07-19 18:11:50 +020034#define SSD1306_SET_REVERSE_DISPLAY 0xa7
35
36#define SSD1306_DISPLAY_OFF 0xae
37#define SSD1306_DISPLAY_ON 0xaf
38
39/*
40 * Addressing Setting Command Table
41 */
42#define SSD1306_SET_LOWER_COL_ADDRESS 0x00
43#define SSD1306_SET_LOWER_COL_ADDRESS_MASK 0x0f
44
45#define SSD1306_SET_HIGHER_COL_ADDRESS 0x10
46#define SSD1306_SET_HIGHER_COL_ADDRESS_MASK 0x0f
47
48#define SSD1306_SET_MEM_ADDRESSING_MODE 0x20 /* double byte command */
49#define SSD1306_SET_MEM_ADDRESSING_HORIZONTAL 0x00
50#define SSD1306_SET_MEM_ADDRESSING_VERTICAL 0x01
51#define SSD1306_SET_MEM_ADDRESSING_PAGE 0x02
52
53#define SSD1306_SET_COLUMN_ADDRESS 0x21 /* triple byte command */
54
55#define SSD1306_SET_PAGE_ADDRESS 0x22 /* triple byte command */
56
57#define SSD1306_SET_PAGE_START_ADDRESS 0xb0
58#define SSD1306_SET_PAGE_START_ADDRESS_MASK 0x07
59
60
61/*
62 * Hardware Configuration Command Table
63 */
64#define SSD1306_SET_START_LINE 0x40
65#define SSD1306_SET_START_LINE_MASK 0x3f
66
67#define SSD1306_SET_SEGMENT_MAP_NORMAL 0xa0
68#define SSD1306_SET_SEGMENT_MAP_REMAPED 0xa1
69
70#define SSD1306_SET_MULTIPLEX_RATIO 0xa8 /* double byte command */
71
72#define SSD1306_SET_COM_OUTPUT_SCAN_NORMAL 0xc0
73#define SSD1306_SET_COM_OUTPUT_SCAN_FLIPPED 0xc8
74
75#define SSD1306_SET_DISPLAY_OFFSET 0xd3 /* double byte command */
76
77#define SSD1306_SET_PADS_HW_CONFIG 0xda /* double byte command */
78#define SSD1306_SET_PADS_HW_SEQUENTIAL 0x02
Théo Battrelbfb541c2024-06-24 11:28:38 +020079#define SSD1306_SET_PADS_HW_ALTERNATIVE 0x12
80
81#define SSD1306_SET_IREF_MODE 0xad
82#define SSD1306_SET_IREF_MODE_INTERNAL 0x30
83#define SSD1306_SET_IREF_MODE_EXTERNAL 0x00
Johann Fischer419f4b72018-07-19 18:11:50 +020084
85
86/*
Nazar Kazakov9713f0d2022-02-24 12:00:55 +000087 * Timing and Driving Scheme Setting Command Table
Johann Fischer419f4b72018-07-19 18:11:50 +020088 */
89#define SSD1306_SET_CLOCK_DIV_RATIO 0xd5 /* double byte command */
90
91#define SSD1306_SET_CHARGE_PERIOD 0xd9 /* double byte command */
92
93#define SSD1306_SET_VCOM_DESELECT_LEVEL 0xdb /* double byte command */
94
95#define SSD1306_NOP 0xe3
96
97/*
98 * Charge Pump Command Table
99 */
100#define SSD1306_SET_CHARGE_PUMP_ON 0x8d /* double byte command */
101#define SSD1306_SET_CHARGE_PUMP_ON_DISABLED 0x10
102#define SSD1306_SET_CHARGE_PUMP_ON_ENABLED 0x14
103
104#define SH1106_SET_DCDC_MODE 0xad /* double byte command */
105#define SH1106_SET_DCDC_DISABLED 0x8a
106#define SH1106_SET_DCDC_ENABLED 0x8b
107
108#define SSD1306_SET_PUMP_VOLTAGE_64 0x30
109#define SSD1306_SET_PUMP_VOLTAGE_74 0x31
110#define SSD1306_SET_PUMP_VOLTAGE_80 0x32
111#define SSD1306_SET_PUMP_VOLTAGE_90 0x33
112
113/*
114 * Read modify write
115 */
116#define SSD1306_READ_MODIFY_WRITE_START 0xe0
117#define SSD1306_READ_MODIFY_WRITE_END 0xee
118
Kwon Tae-younge0a89902019-02-22 17:29:40 +0900119/* time constants in ms */
120#define SSD1306_RESET_DELAY 1
121
Johann Fischer419f4b72018-07-19 18:11:50 +0200122#endif