This page is hosted for free by zzz.com.ua, if you are owner of this page, you can remove this message and gain access to many additional features by upgrading your hosting to PRO or VIP for just 32.50 UAH.
Do you want to support owner of this site? Click here and donate to his account some amount, he will be able to use it to pay for any of our services, including removing this ad.

Подключение LCD дисплея JM04218aFS от китайского iPhone J8 к Arduino

Был у меня когда-то китайский iPhone J8. Как аппарат в 2011 году меня устраивал но через несколько месяцев у него начал косячить тачскрин, а потом и контроллер зарядки сдох. Телефон на долго залег в тумбочке.

В интернете полно примеров как подключить дисплей от мобильника к Arduino, есть целая ветка форума Arduino.ru, где люди уже сотнями наверное подключили дисплеи, а вот для своего я не мог найти ни datasheet ни живых примеров.

И так я забросил поиски года на 2, пока в очередной раз не родилась в голове идея нового проекта.

Что мы имеем. Телефон CHINA iPhone J8, маркировка на шлейфе JIN CHI JM04218aFS, 3.5", 480x320, 40pin. Аналоги дисплея XBI3502F-A1, JM04166a FS, F350293VA, RX-FPC35HX-140A.

Пошел определять распиновку путем, описанным на форуме:

  1. Посмотрел примерную распиновку дисплея. Где линии GND, питание подсветки (К и А) понятно, а плюс питания похоже, что это сдвоенные контакты 36 и 37.
  2. У дисплея 40 пинов. Поиск по маркировке ничего не дает кроме возможных аналогов. Начал искать вообще какие либо дисплеи с 40 пинами. Да такие находятся, но это или LVDS или по расположению пинов из п.1 они не совпадают. Значит не оно. В общей сложности потратил неделю времени и пересмотрел наверное все, что было в интернете.
  3. На макетной плате соорудил переходник, подключая пины через резисторы по 10k, а питание и подсветку через LD33.
  4. Залил скетч в Arduino Mega с читалкой v.5.3 (дал в приложении).
  5. Начал подключать линии данных методом перебора. Линии идут как-бы группами, что наводит на мысль о их упорядоченной нумерации. Пробовал и в прямой нумерации и в зеркальной, также менял группами по 4 и 8 пинов в разных комбинациях.

Цитата пользователя slider с форума

Подключение LCD стандартное адафруитское:

Пины дисплея - к  пинам Уно, Нано, Мини, Меги
// D0 connects to digital pin 8  (Notice these are
// D1 connects to digital pin 9   NOT in order!)
// D2 connects to digital pin 2
// D3 connects to digital pin 3
// D4 connects to digital pin 4
// D5 connects to digital pin 5
// D6 connects to digital pin 6
// D7 connects to digital pin 7
 
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
 
Если у вас не шилд с преобразователями уровней, а голый дисплей, то подключать его через резисторы 10 кОм (если ардуина 5ти вольтовая). Если у дисплея есть D8-D15-D17 , то их желательно через 10к на GND. Во втором случае D0-D7 через резисторы на GND, а D8-D15 подключить как D0-D7 соответственно (не рассматривая редкие случаи других комбинаций, см. тему)

Если известный библиотеке контроллер (ILI9325, ILI9328, HX8347G, HX8357D, ILI9341) не найден, то после чтения запускается графический тест на принудительно минимальном ините и рисование через регистры как в ili9341.

Минимальный инит для часто встречающихся контроллеров, подобных ili9341, ili9327,  ili9486, ili9488, HX835x, R61581... 
у которых   setXY через 2Ah 2Bh + 2Ch  :
   (0x11, 0); ВЫХОД ИЗ СНА
   delay(150);
   (0x36, 0x48); очень важен, иначе перевернуто и цветопередача не та
   (0x3A, 0x05); очень важен, иначе черно-белые кракозябры
   (0x29, 0); ВКЛЮЧЕНИЕ ДИСПЛЕЯ   
   (0x2c, 0); конец записи , необязательно но желательно
Как пользоваться читалкой
  1. Распаковывать в Мои документы\Arduino\libraries в текущую папку (!!! в libraries не должно быть других adafruit и Adafruit_GFX).
  2. Заливать пример Adafruit_TFTLCD\examples\_ID_ReadAllreg_v5.2_graphicstest_.
  3. Смотреть, что она выдаст в монитор порта. Надо обращать внимание на информацию с регистров 00 04 2A 2B BF D3 DA DB DC EF.
  4. Затем, по умолчанию скетч прогоняет тест графики, используя инит от контроллера ili9341 (как часто встречающийся на это время), если у вас подобный контроллер или со схожим инитом, то на дисплее увидите тест графики.
Что делает читалка v5.3
  1. Считывает регистры 00-FE, и отдельно 00 04 2A 2B BF D3 DA DB DC EF, задержка.
  2. В B0 заносит 0xFFFFFF, и считывает и B0-FE.
  3. В B0 заносит 0x040404, и считывает и B0-FE.
  4. Если найден контроллер из известных библиотеке (ili9325, ili9328, ili9341, HX8347G, HX8357D), то она используя его, запускает график тест. Если неизвестен, то используется минимальный инит, для контроллеров с родни ili9341, ili9488 и других, у которых setXY реализован через регистры 2A2B, 2C.
Для некоторых контроллеров существуют и регистры с адресами выше FF, но как правило ID у них находится по 00 адресу.
Смысл считывания регистров от 00_FF, чтобы понять правильно ли подключен дисплей и он хоть что-то, хоть где-то отвечает. Т.к. после изменения B0h нельзя сбрасывать дисплей, то эта читалка читает регистры без сброса перед каждым. Поэтому во многих регистрах появится хлам в отличии от предыдущих читалок. В даташите на многие контроллеры так и указано, что первому параметру не верить, он обычно содержит последний прочитанный байт предыдущего регистра. В этом есть какой-то плюс (узнаем те регистры которые могут что-то отвечать, в отличии от других которые выдают ровный 0).
 
В итоге дисплей показал признаки жизни при таком подключении (единственное не знаю за что отвечают пины 35 и 40, я пытался их на на +3,3В и на GND вешать, но положительного результата никакого не заметил, только хуже было).
01-D0
02-D1
03-D2
04-D3
05-GND
06-D4
07-D5
08-D6
09-D7
10-GND
11-GND
12-D8
13-D9
14-D10
15-D11
16-GND
17-D12
18-D13
19-D14
20-D15
21-CS
22-RS(CD)
23-WR
24-RD
25-XR
26-YU
27-XL
28-YD
29-LED_A
30-LED_K1
31-LED_K2
32-LED_K3
33-LED_K4
34-RESET
35-???
36-VCC
37-VCC
38-LED_K5
39-LED_K6
40-???
Читалка выдает следующий лог
. . . . . . 
writing in Manufacturer Command Access Protect (B0h) <- 0xFFFFFF
B0 = B0 B0 B0 B0 B0 B0 B0 B0
Device Code Read (BFh)
BF = BF BF BF BF BF BF BF BF *****
. . .

reg p1 p2 p3 p4 p5 p6 p7 p8
B0 = B0 B0 B0 B0 B0 B0 B0 B0
B1 = B1 B1 B1 B1 B1 B1 B1 B1
B2 = B2 B2 B2 B2 B2 B2 B2 B2
B3 = B3 B3 B3 B3 B3 B3 B3 B3
B4 = B4 B4 B4 B4 B4 B4 B4 B4
B5 = B5 B5 B5 B5 B5 B5 B5 B5
B6 = B6 B6 B6 B6 B6 B6 B6 B6
B7 = B7 B7 B7 B7 B7 B7 B7 B7
B8 = B8 B8 B8 B8 B8 B8 B8 B8
B9 = B9 B9 B9 B9 B9 B9 B9 B9
BA = BA BA BA BA BA BA BA BA
BB = BB BB BB BB BB BB BB BB
BC = BC BC BC BC BC BC BC BC
BD = BD BD BD BD BD BD BD BD
BE = BE BE BE BE BE BE BE BE
BF = BF BF BF BF BF BF BF BF *****
C0 = C0 C0 C0 C0 C0 C0 C0 C0
C1 = C1 C1 C1 C1 C1 C1 C1 C1
C2 = C2 C2 C2 C2 C2 C2 C2 C2
C3 = C3 C3 C3 C3 C3 C3 C3 C3
C4 = C4 C4 C4 C4 C4 C4 C4 C4
C5 = C5 C5 C5 C5 C5 C5 C5 C5
C6 = C6 C6 C6 C6 C6 C6 C6 C6
C7 = C7 C7 C7 C7 C7 C7 C7 C7
C8 = C8 C8 C8 C8 C8 C8 C8 C8
C9 = C9 C9 C9 C9 C9 C9 C9 C9
CA = CA CA CA CA CA CA CA CA
CB = CB CB CB CB CB CB CB CB
CC = CC CC CC CC CC CC CC CC
CD = CD CD CD CD CD CD CD CD
CE = CE CE CE CE CE CE CE CE
CF = CF CF CF CF CF CF CF CF
D0 = D0 D0 D0 D0 D0 D0 D0 D0
D1 = D1 D1 D1 D1 D1 D1 D1 D1
D2 = D2 D2 D2 D2 D2 D2 D2 D2
D3 = D3 D3 D3 D3 D3 D3 D3 D3 *****
D4 = D4 D4 D4 D4 D4 D4 D4 D4
D5 = D5 D5 D5 D5 D5 D5 D5 D5
D6 = D6 D6 D6 D6 D6 D6 D6 D6
D7 = D7 D7 D7 D7 D7 D7 D7 D7
D8 = D8 D8 D8 D8 D8 D8 D8 D8
D9 = D9 D9 D9 D9 D9 D9 D9 D9
DA = DA DA DA DA DA DA DA DA *****
DB = DB DB DB DB DB DB DB DB *****
DC = DC DC DC DC DC DC DC DC *****
DD = DD DD DD DD DD DD DD DD
DE = DE DE DE DE DE DE DE DE
DF = DF DF DF DF DF DF DF DF
E0 = E0 E0 E0 E0 E0 E0 E0 E0
E1 = E1 E1 E1 E1 E1 E1 E1 E1
E2 = E2 E2 E2 E2 E2 E2 E2 E2
E3 = E3 E3 E3 E3 E3 E3 E3 E3
E4 = E4 E4 E4 E4 E4 E4 E4 E4
E5 = E5 E5 E5 E5 E5 E5 E5 E5
E6 = E6 E6 E6 E6 E6 E6 E6 E6
E7 = E7 E7 E7 E7 E7 E7 E7 E7
E8 = E8 E8 E8 E8 E8 E8 E8 E8
E9 = E9 E9 E9 E9 E9 E9 E9 E9
EA = EA EA EA EA EA EA EA EA
EB = EB EB EB EB EB EB EB EB
EC = EC EC EC EC EC EC EC EC
ED = ED ED ED ED ED ED ED ED
EE = EE EE EE EE EE EE EE EE
EF = EF EF EF EF EF EF EF EF *****
F0 = F0 F0 F0 F0 F0 F0 F0 F0
F1 = F1 F1 F1 F1 F1 F1 F1 F1
F2 = F2 F2 F2 F2 F2 F2 F2 F2
F3 = F3 F3 F3 F3 F3 F3 F3 F3
F4 = F4 F4 F4 F4 F4 F4 F4 F4
F5 = F5 F5 F5 F5 F5 F5 F5 F5
F6 = F6 F6 F6 F6 F6 F6 F6 F6
F7 = F7 F7 F7 F7 F7 F7 F7 F7
F8 = F8 F8 F8 F8 F8 F8 F8 F8
F9 = F9 F9 F9 F9 F9 F9 F9 F9
FA = FA FA FA FA FA FA FA FA
FB = FB FB FB FB FB FB FB FB
FC = FC FC FC FC FC FC FC FC
FD = FD FD FD FD FD FD FD FD
FE = FE FE FE FE FE FE FE FE
writing in Manufacturer Command Access Protect (B0h) <- 0x040404
B0 = B0 B0 B0 B0 B0 B0 B0 B0
Device Code Read (BFh)
BF = BF BF BF BF BF BF BF BF *****
. . .

reg p1 p2 p3 p4 p5 p6 p7 p8
B0 = B0 B0 B0 B0 B0 B0 B0 B0
B1 = B1 B1 B1 B1 B1 B1 B1 B1
B2 = B2 B2 B2 B2 B2 B2 B2 B2
B3 = B3 B3 B3 B3 B3 B3 B3 B3
B4 = B4 B4 B4 B4 B4 B4 B4 B4
B5 = B5 B5 B5 B5 B5 B5 B5 B5
B6 = B6 B6 B6 B6 B6 B6 B6 B6
B7 = B7 B7 B7 B7 B7 B7 B7 B7
B8 = B8 B8 B8 B8 B8 B8 B8 B8
B9 = B9 B9 B9 B9 B9 B9 B9 B9
BA = BA BA BA BA BA BA BA BA
BB = BB BB BB BB BB BB BB BB
BC = BC BC BC BC BC BC BC BC
BD = BD BD BD BD BD BD BD BD
BE = BE BE BE BE BE BE BE BE
BF = BF BF BF BF BF BF BF BF *****
C0 = C0 C0 C0 C0 C0 C0 C0 C0
C1 = C1 C1 C1 C1 C1 C1 C1 C1
C2 = C2 C2 C2 C2 C2 C2 C2 C2
C3 = C3 C3 C3 C3 C3 C3 C3 C3
C4 = C4 C4 C4 C4 C4 C4 C4 C4
C5 = C5 C5 C5 C5 C5 C5 C5 C5
C6 = C6 C6 C6 C6 C6 C6 C6 C6
C7 = C7 C7 C7 C7 C7 C7 C7 C7
C8 = C8 C8 C8 C8 C8 C8 C8 C8
C9 = C9 C9 C9 C9 C9 C9 C9 C9
CA = CA CA CA CA CA CA CA CA
CB = CB CB CB CB CB CB CB CB
CC = CC CC CC CC CC CC CC CC
CD = CD CD CD CD CD CD CD CD
CE = CE CE CE CE CE CE CE CE
CF = CF CF CF CF CF CF CF CF
D0 = D0 D0 D0 D0 D0 D0 D0 D0
D1 = D1 D1 D1 D1 D1 D1 D1 D1
D2 = D2 D2 D2 D2 D2 D2 D2 D2
D3 = D3 D3 D3 D3 D3 D3 D3 D3 *****
D4 = D4 D4 D4 D4 D4 D4 D4 D4
D5 = D5 D5 D5 D5 D5 D5 D5 D5
D6 = D6 D6 D6 D6 D6 D6 D6 D6
D7 = D7 D7 D7 D7 D7 D7 D7 D7
D8 = D8 D8 D8 D8 D8 D8 D8 D8
D9 = D9 D9 D9 D9 D9 D9 D9 D9
DA = DA DA DA DA DA DA DA DA *****
DB = DB DB DB DB DB DB DB DB *****
DC = DC DC DC DC DC DC DC DC *****
DD = DD DD DD DD DD DD DD DD
DE = DE DE DE DE DE DE DE DE
DF = DF DF DF DF DF DF DF DF
E0 = E0 E0 E0 E0 E0 E0 E0 E0
E1 = E1 E1 E1 E1 E1 E1 E1 E1
E2 = E2 E2 E2 E2 E2 E2 E2 E2
E3 = E3 E3 E3 E3 E3 E3 E3 E3
E4 = E4 E4 E4 E4 E4 E4 E4 E4
E5 = E5 E5 E5 E5 E5 E5 E5 E5
E6 = E6 E6 E6 E6 E6 E6 E6 E6
E7 = E7 E7 E7 E7 E7 E7 E7 E7
E8 = E8 E8 E8 E8 E8 E8 E8 E8
E9 = E9 E9 E9 E9 E9 E9 E9 E9
EA = EA EA EA EA EA EA EA EA
EB = EB EB EB EB EB EB EB EB
EC = EC EC EC EC EC EC EC EC
ED = ED ED ED ED ED ED ED ED
EE = EE EE EE EE EE EE EE EE
EF = EF EF EF EF EF EF EF EF *****
F0 = F0 F0 F0 F0 F0 F0 F0 F0
F1 = F1 F1 F1 F1 F1 F1 F1 F1
F2 = F2 F2 F2 F2 F2 F2 F2 F2
F3 = F3 F3 F3 F3 F3 F3 F3 F3
F4 = F4 F4 F4 F4 F4 F4 F4 F4
F5 = F5 F5 F5 F5 F5 F5 F5 F5
F6 = F6 F6 F6 F6 F6 F6 F6 F6
F7 = F7 F7 F7 F7 F7 F7 F7 F7
F8 = F8 F8 F8 F8 F8 F8 F8 F8
F9 = F9 F9 F9 F9 F9 F9 F9 F9
FA = FA FA FA FA FA FA FA FA
FB = FB FB FB FB FB FB FB FB
FC = FC FC FC FC FC FC FC FC
FD = FD FD FD FD FD FD FD FD
FE = FE FE FE FE FE FE FE FE

Unknown LCD driver chip: 0
***use minimal init as driver ili9341 ili9488 *** ->
Benchmark Time (microseconds)
Screen fill 2002632
Text 569428
Lines 5657100
Horiz/Vert Lines 239760
Rectangles (outline) 173256
Rectangles (filled) 5413268
Circles (filled) 2035224
Circles (outline) 2456368
Triangles (outline) 1794308
Triangles (filled) 2699068
Rounded rects (outline) 842584
Rounded rects (filled) 6289776
Done!!! ID reader v5.3

Раз читалка не определила чип, решил загрузить графический тест из библиотеки UTFT и перебрать все иниты. Подошел CTE32HR и дисплей бодренько все отрисовал.

Заметил очень не устойчивый контакт с китайскими ардуиновскими разъемами, поэтому дальше сделаю платку (типа шильда) и попробую считать информацию еще раз (после чего обновлю данную заметку)

MaD-TuX

Я не программист и не электронщик, но мне нравится что-то делать самому. Все мои знания берутся из интернет форумов, статей и персональных страниц.

Просто делюсь своими наработками