Skip to content

Commit 84e62e3

Browse files
committed
working on being able to share the SPI Bus
1 parent ba5b138 commit 84e62e3

File tree

7 files changed

+611
-1001
lines changed

7 files changed

+611
-1001
lines changed

api_drivers/common_api_drivers/display/rm68140.py

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def init(self):
2121
param_mv = memoryview(param_buf)
2222

2323
time.sleep_ms(20)
24-
self.set_params(display_driver_framework._SLPOUT)
24+
self.set_params(_SLPOUT)
2525

2626
param_buf[0] = 0x07
2727
param_buf[1] = 0x42
@@ -62,25 +62,13 @@ def init(self):
6262
self.set_params(0xC8, param_mv[:12])
6363

6464
param_buf[0] = 0x0A
65-
self.set_params(display_driver_framework._MADCTL, param_mv[:1])
65+
self.set_params(_MADCTL, param_mv[:1])
6666

6767
param_buf[0] = 0x55
6868
self.set_params(0x3A, param_mv[:1])
6969

70-
param_buf[0] = 0x00
71-
param_buf[1] = 0x00
72-
param_buf[2] = 0x01
73-
param_buf[3] = 0x3F
74-
self.set_params(display_driver_framework._CASET, param_mv[:4])
75-
76-
param_buf[0] = 0x00
77-
param_buf[1] = 0x00
78-
param_buf[2] = 0x01
79-
param_buf[3] = 0xDF
80-
self.set_params(display_driver_framework._PASET, param_mv[:4])
81-
8270
time.sleep_ms(120)
83-
self.set_params(display_driver_framework._DISPON)
71+
self.set_params(_DISPON)
8472

8573
time.sleep_ms(25)
8674

Lines changed: 164 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,164 @@
1-
'''
2-
3-
4-
// Color definitions for backwards compatibility with old sketches
5-
// use colour definitions like TFT_BLACK to make sketches more portable
6-
#define S6D02A1_BLACK 0x0000 /* 0, 0, 0 */
7-
#define S6D02A1_NAVY 0x000F /* 0, 0, 128 */
8-
#define S6D02A1_DARKGREEN 0x03E0 /* 0, 128, 0 */
9-
#define S6D02A1_DARKCYAN 0x03EF /* 0, 128, 128 */
10-
#define S6D02A1_MAROON 0x7800 /* 128, 0, 0 */
11-
#define S6D02A1_PURPLE 0x780F /* 128, 0, 128 */
12-
#define S6D02A1_OLIVE 0x7BE0 /* 128, 128, 0 */
13-
#define S6D02A1_LIGHTGREY 0xC618 /* 192, 192, 192 */
14-
#define S6D02A1_DARKGREY 0x7BEF /* 128, 128, 128 */
15-
#define S6D02A1_BLUE 0x001F /* 0, 0, 255 */
16-
#define S6D02A1_GREEN 0x07E0 /* 0, 255, 0 */
17-
#define S6D02A1_CYAN 0x07FF /* 0, 255, 255 */
18-
#define S6D02A1_RED 0xF800 /* 255, 0, 0 */
19-
#define S6D02A1_MAGENTA 0xF81F /* 255, 0, 255 */
20-
#define S6D02A1_YELLOW 0xFFE0 /* 255, 255, 0 */
21-
#define S6D02A1_WHITE 0xFFFF /* 255, 255, 255 */
22-
#define S6D02A1_ORANGE 0xFD20 /* 255, 165, 0 */
23-
#define S6D02A1_GREENYELLOW 0xAFE5 /* 173, 255, 47 */
24-
#define S6D02A1_PINK 0xF81F
25-
26-
27-
// Delay between some initialisation commands
28-
#define TFT_INIT_DELAY 0x80
29-
30-
31-
// Generic commands used by TFT_eSPI.cpp
32-
#define TFT_NOP 0x00
33-
#define TFT_SWRST 0x01
34-
35-
#define TFT_INVOFF 0x20
36-
#define TFT_INVON 0x21
37-
38-
#define TFT_DISPOFF 0x28
39-
#define TFT_DISPON 0x29
40-
41-
#define TFT_CASET 0x2A
42-
#define TFT_PASET 0x2B
43-
#define TFT_RAMWR 0x2C
44-
45-
#define TFT_RAMRD 0x2E
46-
#define TFT_IDXRD 0x00 //0xDD // ILI9341 only, indexed control register read
47-
48-
#define TFT_MADCTL 0x36
49-
#define TFT_MAD_MY 0x80
50-
#define TFT_MAD_MX 0x40
51-
#define TFT_MAD_MV 0x20
52-
#define TFT_MAD_ML 0x10
53-
#define TFT_MAD_BGR 0x08
54-
#define TFT_MAD_MH 0x04
55-
#define TFT_MAD_RGB 0x00
56-
57-
58-
59-
// Initialization commands for S6D02A1 screens
60-
static const uint8_t S6D02A1_cmds[] PROGMEM =
61-
{
62-
29,
63-
0xf0, 2, 0x5a, 0x5a, // Excommand2
64-
0xfc, 2, 0x5a, 0x5a, // Excommand3
65-
0x26, 1, 0x01, // Gamma set
66-
0xfa, 15, 0x02, 0x1f, 0x00, 0x10, 0x22, 0x30, 0x38, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3d, 0x02, 0x01, // Positive gamma control
67-
0xfb, 15, 0x21, 0x00, 0x02, 0x04, 0x07, 0x0a, 0x0b, 0x0c, 0x0c, 0x16, 0x1e, 0x30, 0x3f, 0x01, 0x02, // Negative gamma control
68-
0xfd, 11, 0x00, 0x00, 0x00, 0x17, 0x10, 0x00, 0x01, 0x01, 0x00, 0x1f, 0x1f, // Analog parameter control
69-
0xf4, 15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x07, 0x00, 0x3C, 0x36, 0x00, 0x3C, 0x36, 0x00, // Power control
70-
0xf5, 13, 0x00, 0x70, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x66, 0x06, // VCOM control
71-
0xf6, 11, 0x02, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x01, 0x00, // Source control
72-
0xf2, 17, 0x00, 0x01, 0x03, 0x08, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x08, 0x08, //Display control
73-
0xf8, 1, 0x11, // Gate control
74-
0xf7, 4, 0xc8, 0x20, 0x00, 0x00, // Interface control
75-
0xf3, 2, 0x00, 0x00, // Power sequence control
76-
0x11, TFT_INIT_DELAY, 50, // Wake
77-
0xf3, 2+TFT_INIT_DELAY, 0x00, 0x01, 50, // Power sequence control
78-
0xf3, 2+TFT_INIT_DELAY, 0x00, 0x03, 50, // Power sequence control
79-
0xf3, 2+TFT_INIT_DELAY, 0x00, 0x07, 50, // Power sequence control
80-
0xf3, 2+TFT_INIT_DELAY, 0x00, 0x0f, 50, // Power sequence control
81-
0xf4, 15+TFT_INIT_DELAY, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x07, 0x00, 0x3C, 0x36, 0x00, 0x3C, 0x36, 0x00, 50, // Power control
82-
0xf3, 2+TFT_INIT_DELAY, 0x00, 0x1f, 50, // Power sequence control
83-
0xf3, 2+TFT_INIT_DELAY, 0x00, 0x7f, 50, // Power sequence control
84-
0xf3, 2+TFT_INIT_DELAY, 0x00, 0xff, 50, // Power sequence control
85-
0xfd, 11, 0x00, 0x00, 0x00, 0x17, 0x10, 0x00, 0x00, 0x01, 0x00, 0x16, 0x16, // Analog parameter control
86-
0xf4, 15, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x07, 0x00, 0x3C, 0x36, 0x00, 0x3C, 0x36, 0x00, // Power control
87-
0x36, 1, 0xC8, // Memory access data control
88-
0x35, 1, 0x00, // Tearing effect line on
89-
0x3a, 1+TFT_INIT_DELAY, 0x05, 150, // Interface pixel control
90-
0x29, 0, // Display on
91-
0x2c, 0 // Memory write
92-
};
93-
94-
'''
1+
2+
import time
3+
from micropython import const # NOQA
4+
5+
import lvgl as lv # NOQA
6+
import lcd_bus # NOQA
7+
import display_driver_framework
8+
9+
10+
STATE_HIGH = display_driver_framework.STATE_HIGH
11+
STATE_LOW = display_driver_framework.STATE_LOW
12+
STATE_PWM = display_driver_framework.STATE_PWM
13+
14+
BYTE_ORDER_RGB = display_driver_framework.BYTE_ORDER_RGB
15+
BYTE_ORDER_BGR = display_driver_framework.BYTE_ORDER_BGR
16+
17+
18+
class S6D02A1(display_driver_framework.DisplayDriver):
19+
20+
def init(self):
21+
param_buf = bytearray(17)
22+
param_mv = memoryview(param_buf)
23+
24+
param_buf[0] = 0x5a
25+
param_buf[1] = 0x5a
26+
self.set_params(0xf0, param_mv[:2])
27+
28+
param_buf[0] = 0x5a
29+
param_buf[1] = 0x5a
30+
self.set_params(0xfc, param_mv[:2])
31+
32+
param_buf[0] = 0x01
33+
self.set_params(0x26, param_mv[:1])
34+
35+
param_buf[:15] = bytearray([
36+
0x02, 0x1f, 0x00, 0x10, 0x22, 0x30, 0x38,
37+
0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3d, 0x02, 0x01
38+
])
39+
self.set_params(0xfa, param_mv[:15])
40+
41+
param_buf[:15] = bytearray([
42+
0x21, 0x00, 0x02, 0x04, 0x07, 0x0a, 0x0b,
43+
0x0c, 0x0c, 0x16, 0x1e, 0x30, 0x3f, 0x01, 0x02
44+
])
45+
self.set_params(0xfb, param_mv[:15])
46+
47+
param_buf[:11] = bytearray([
48+
0x00, 0x00, 0x00, 0x17, 0x10,
49+
0x00, 0x01, 0x01, 0x00, 0x1f, 0x1f
50+
])
51+
self.set_params(0xfd, param_mv[:11])
52+
53+
param_buf[:15] = bytearray([
54+
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f,
55+
0x07, 0x00, 0x3C, 0x36, 0x00, 0x3C, 0x36, 0x00
56+
])
57+
self.set_params(0xf4, param_mv[:15])
58+
59+
param_buf[:13] = bytearray([
60+
0x00, 0x70, 0x66, 0x00, 0x00, 0x00,
61+
0x00, 0x00, 0x00, 0x00, 0x6d, 0x66, 0x06
62+
])
63+
self.set_params(0xf5, param_mv[:13])
64+
65+
param_buf[:11] = bytearray([
66+
0x02, 0x00, 0x3f, 0x00, 0x00,
67+
0x00, 0x02, 0x00, 0x06, 0x01, 0x00
68+
])
69+
self.set_params(0xf6, param_mv[:11])
70+
71+
param_buf[:17] = bytearray([
72+
0x00, 0x01, 0x03, 0x08, 0x08, 0x04, 0x00, 0x00, 0x00,
73+
0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x08, 0x08
74+
])
75+
self.set_params(0xf2, param_mv[:17])
76+
77+
param_buf[0] = 0x11
78+
self.set_params(0xf8, param_mv[:1])
79+
80+
param_buf[:4] = bytearray([0xc8, 0x20, 0x00, 0x00])
81+
self.set_params(0xf7, param_mv[:4])
82+
83+
param_buf[0] = 0x00
84+
param_buf[1] = 0x00
85+
self.set_params(0xf3, param_mv[:2])
86+
87+
self.set_params(0x11)
88+
time.sleep_ms(50)
89+
90+
param_buf[0] = 0x00
91+
param_buf[1] = 0x01
92+
self.set_params(0xf3, param_mv[:2])
93+
94+
time.sleep_ms(50)
95+
96+
param_buf[0] = 0x00
97+
param_buf[1] = 0x03
98+
self.set_params(0xf3, param_mv[:2])
99+
100+
time.sleep_ms(50)
101+
102+
param_buf[0] = 0x00
103+
param_buf[1] = 0x07
104+
self.set_params(0xf3, param_mv[:2])
105+
106+
time.sleep_ms(50)
107+
108+
param_buf[0] = 0x00
109+
param_buf[1] = 0x0f
110+
self.set_params(0xf3, param_mv[:2])
111+
112+
time.sleep_ms(50)
113+
114+
param_buf[:15] = bytearray([
115+
0x00, 0x04, 0x00, 0x00, 0x00, 0x3f, 0x3f,
116+
0x07, 0x00, 0x3C, 0x36, 0x00, 0x3C, 0x36, 0x00
117+
])
118+
self.set_params(0xf4, param_mv[:15])
119+
120+
time.sleep_ms(50)
121+
122+
param_buf[0] = 0x00
123+
param_buf[1] = 0x1f
124+
self.set_params(0xf3, param_mv[:2])
125+
126+
time.sleep_ms(50)
127+
128+
param_buf[0] = 0x00
129+
param_buf[1] = 0x7f
130+
self.set_params(0xf3, param_mv[:2])
131+
132+
time.sleep_ms(50)
133+
134+
param_buf[0] = 0x00
135+
param_buf[1] = 0xff
136+
self.set_params(0xf3, param_mv[:2])
137+
138+
time.sleep_ms(50)
139+
140+
param_buf[:11] = bytearray([
141+
0x00, 0x00, 0x00, 0x17, 0x10,
142+
0x00, 0x00, 0x01, 0x00, 0x16, 0x16
143+
])
144+
self.set_params(0xfd, param_mv[:11])
145+
146+
param_buf[:15] = bytearray([
147+
0x00, 0x09, 0x00, 0x00, 0x00, 0x3f, 0x3f,
148+
0x07, 0x00, 0x3C, 0x36, 0x00, 0x3C, 0x36, 0x00
149+
])
150+
self.set_params(0xf4, param_mv[:15])
151+
152+
param_buf[0] = 0xC8
153+
self.set_params(0x36, param_mv[:1])
154+
155+
param_buf[0] = 0x00
156+
self.set_params(0x35, param_mv[:1])
157+
158+
param_buf[0] = 0x05
159+
self.set_params(0x3a, param_mv[:1])
160+
161+
time.sleep_ms(150)
162+
163+
self.set_params(0x29)
164+
self.set_params(0x2c)
Lines changed: 42 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,45 @@
1-
'''
2-
#define TFT_NOP 0x00
3-
#define TFT_SWRST TFT_NOP
4-
#define TFT_CASET 0x15 // SETCOLUMN
5-
#define TFT_PASET 0x75 // SETROW
6-
#define TFT_RAMWR 0x5C // WRITERAM
7-
#define TFT_RAMRD 0x5D // READRAM
8-
#define TFT_IDXRD TFT_NOP
9-
#define TFT_INVOFF 0xA6 // NORMALDISPLAY
10-
#define TFT_INVON 0xA7 // INVERTDISPLAY
11-
12-
13-
writecommand(0xFD); // COMMANDLOCK
14-
writedata(0x12);
15-
writecommand(0xFD); // COMMANDLOCK
16-
writedata(0xB1);
17-
writecommand(0xAE); // DISPLAYOFF
18-
writecommand(0xB3); // CLOCKDIV
19-
writedata(0xF1);
20-
writecommand(0xCA); // MUXRATIO
21-
writedata(127);
22-
writecommand(0xA2); // DISPLAYOFFSET
23-
writedata(0x00);
24-
writecommand(0xB5); // SETGPIO
25-
writedata(0x00);
26-
writecommand(0xAB); // FUNCTIONSELECT
27-
writedata(0x01);
28-
writecommand(0xB1); // PRECHARGE
29-
writedata(0x32);
30-
writecommand(0xBE); // VCOMH
31-
writedata(0x05);
32-
writecommand(0xA6); // NORMALDISPLAY
33-
writecommand(0xC1); // CONTRASTABC
34-
writedata(0xC8);
35-
writedata(0x80);
36-
writedata(0xC8);
37-
writecommand(0xC7); // CONTRASTMASTER
38-
writedata(0x0F);
39-
writecommand(0xB4); // SETVSL
40-
writedata(0xA0);
41-
writedata(0xB5);
42-
writedata(0x55);
43-
writecommand(0xB6); // PRECHARGE2
44-
writedata(0x01);
45-
writecommand(0xAF); // DISPLAYON
46-
47-
48-
49-
param_buf[0] = 0x12
1+
2+
from micropython import const # NOQA
3+
4+
import lvgl as lv # NOQA
5+
import lcd_bus # NOQA
6+
import display_driver_framework
7+
8+
_CASET = const(0x15)
9+
_PASET = const(0x75)
10+
_RAMWR = const(0x5C)
11+
12+
13+
class SSD1351(display_driver_framework.DisplayDriver):
14+
_INVOFF = 0xA6
15+
_INVON = 0xA7
16+
17+
def _set_memory_location(self, x1, y1, x2, y2):
18+
# Column addresses
19+
param_buf = self._param_buf
20+
21+
param_buf[0] = (x1 >> 8) & 0xFF
22+
param_buf[1] = x1 & 0xFF
23+
param_buf[2] = (x2 >> 8) & 0xFF
24+
param_buf[3] = x2 & 0xFF
25+
26+
self._data_bus.tx_param(_CASET, self._param_mv[:4])
27+
28+
# Page addresses
29+
param_buf[0] = (y1 >> 8) & 0xFF
30+
param_buf[1] = y1 & 0xFF
31+
param_buf[2] = (y2 >> 8) & 0xFF
32+
param_buf[3] = y2 & 0xFF
33+
34+
self._data_bus.tx_param(_PASET, self._param_mv[:4])
35+
36+
return _RAMWR
37+
38+
def init(self):
39+
param_buf = bytearray(14)
40+
param_mv = memoryview(param_buf)
41+
42+
param_buf[0] = 0x12
5043
self.set_params(0xFD, param_mv[:1])
5144

5245
param_buf[0] = 0xB1
@@ -94,5 +87,3 @@
9487
self.set_params(0xB6, param_mv[:1])
9588

9689
self.set_params(0xAF)
97-
98-
'''

0 commit comments

Comments
 (0)