Запаял бы ты лучше для начала мк на самую простую макетку [плюс две ёмкости на +5 и +3.3, резистор 10к на d+ и usb-проводок от какой-нибудь сдохшей мыши]
А так твоя платка лишний фактор неопределённости
CH55x (CH551 CH552 CH554)
Сообщений 121 страница 150 из 162
Поделиться1212019-06-07 21:57:30
Поделиться1222019-06-10 21:16:47
Фигня какая-то постоянно считывается: первым байтом идет первый байт из предыдущей последовательности, которая писалась в МК, а дальше — набор байт, разный в разных чипах. Например, запрос на серию:
0xA2 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x06 0x00 0x00 0x00 0x18 0x00 0x00 0x00 0x10 0xEB 0x3F 0xBC 0x21 0x7F 0x00 0x00 0xF0 0x14 0xB7 0xBC 0x21 0x7F 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x48 0x69 0x9D 0xBC 0x21 0x7F 0x00 0x00 0xD8 0xE1 0xDA 0xF0 0xFE 0x7F 0x00 0x00
Если как и было, пытаться считать только 2 байта, идет ошибка OVERFLOW...
Народ, у кого есть эти чипы, подправьте:
write_to_device(detect_chip_cmd_v1, 63); read_from_device(inbuffer, 64); hexdump(inbuffer, 64); printf("Libre CH551 Flasher 2018\n");
Интересно, что у вас в этом буфере.
Да, еще странность: как только я включаю МК, он в режиме бутлодыря! Жму ли я кнопку boot, подтягивающую DP через 20-кОмный резистор к 5В или не жму ее, все равно!!!
А еще интересней, так это где автор wchisptool брал данные о протоколах? Хочу эти данные.
Отредактировано Eddy_Em (2019-06-10 21:28:44)
Поделиться1232019-06-10 22:59:32
Похоже для начала лучше ещё и настоящую виндошную wchisptool )
librech551 - рабочая программа, я её проверял
Поделиться1242019-06-11 00:00:15
Ну, не знаю, как ты ее проверял: я скачал с гитхаба, скомпилял. Нашел пару багов.
Ты, кстати, если запустишь "девственную" wchisptool с ключом -h, то справки увидеть не должен.
Ну или я скачал не с той репы. Но вроде бы на гитхабе только одна есть. Не знаю, зачем ее обозвали librech551, если там лежит wchisptool, да еще и кривой…
Поделиться1252019-06-11 09:07:59
Не знаю, зачем ее обозвали librech551, если там лежит wchisptool, да еще и кривой…
librech551 это вовсе не wchisptool, автор напрасно использовал то же самое название
Я librech551 "портировал" под tcc [ссылка на предыдущей странице]
Отредактировано vt (2019-06-11 10:10:39)
Поделиться1262019-06-16 18:36:28
Интересно, что у вас в этом буфере.
write_to_device(detect_chip_cmd_v1, 63); read_from_device(inbuffer, 2); hexdump(inbuffer, 2); printf("Libre CH551 Flasher 2018\n");
0x54 0x00
Libre CH551 Flasher 2018
Detected device CH554
Device rom capacity 14336, data flash capacity 128
Eddy_Em, а может дело вот в этом [как автор в readme пишет]
Implement new CH55x ISP protocol (for bootloader version > 2.30), for now we don't have any chip shipped with the new bootloader: WCH's FAE said that they will release chips with new bootloader after Apr.2018.
Возможно у тебя чипы с этим новым протоколом и тогда наверно надо запускать с опцией "n"
Т.е. все cmd с суффиксом v2, а не v1
Поделиться1272019-06-16 21:49:13
С новым пробовал, тоже такие мысли пришли - не работает...
Поделиться1282019-06-16 23:28:45
С новым пробовал, тоже такие мысли пришли - не работает...
а платки какие? может все таки засветишь?
я с этими мк дело не имел. и по-ходу в ближайшее время дел иметь не буду. нету их. но как мне кажется начать надо CH55x (CH551-CH554)
свести все к минимуму. а потом уже разворачиваться. или я не в курсе чего-то.
Отредактировано RA (2019-06-16 23:30:37)
Поделиться1292019-06-17 08:36:38
Вот такая "девборда", для STM32 в lqfp48 дурища еще больше, но там косяков нет, даже кварц нормально завелся на STM32F103 (хотя основное предназначение платы - STM32F0x2).
Еще раз повторю: если бы были косяки с разводкой, то компьютер бы не определил устройство! У меня же все ОК, и dmesg показывает, что появился бутлоадер. Таким образом, главный косяк - прошивальщик.
И пока я не увижу нормальный английский даташит на прошивальщик, чтобы можно было допилить то китайское творение, никаких работ с этими МК проводить смысла нет.
Как последний вариант - в виртуалбоксе под хрюнделем или спермеркой поставить китайскую вантузоидную прошивалку и попробовать ею. Если взлетит, то реверсить и дописывать прошивальщик.
Поделиться1302019-06-17 09:02:38
И пока я не увижу нормальный английский даташит на прошивальщик
Никогда не увидишь
Как последний вариант - в виртуалбоксе под хрюнделем или спермеркой поставить китайскую вантузоидную прошивалку и попробовать ею.
Это должен был быть самый первый вариант [и не в виртуалбоксе], а потом уже все остальные телодвижения
Заказал ещё ch552g, приедут - посмотрю, что в них изменилось [если изменилось]
Отредактировано vt (2019-06-17 09:33:51)
Поделиться1312019-06-17 09:56:23
Это должен был быть самый первый вариант [и не в виртуалбоксе]
Вот делать мне нечего - искать где-то игровую приставку... А виртуалбокс я на любом компьютере запустить могу!
Поделиться1322019-06-17 10:40:30
Сам себе создаёшь проблемы и потом героически преодолеваешь
Отредактировано vt (2019-09-20 15:58:42)
Поделиться1332019-06-28 08:02:46
Бутлоадер у новых ch552 действительно другой - с шифрованием
Вот лог работы [с частичным разбором] фирменной виндошной wchisptool
out 21 - detect_chip_cmd_v2 A1 12 00 52 11 4D 43 55 20 49 53 50 20 26 20 57 43 48 2E 43 4E in 6 A1 F9 02 00 52 11 out 5 - read_cfg_cmd_v2 A7 02 00 1F 00 in 30 A7 F9 1A 00 1F 00 FF FF FF FF 23 00 00 00 FF 52 5F AF 00 02 03 01 16 05 43 43 AF E7 CB 2B out 17 - ? A8 0E 00 07 00 FF FF FF FF 03 00 00 00 FF 52 00 00 in 6 A8 F9 02 00 00 00 out 5 - read_cfg_cmd_v2 A7 02 00 1F 00 in 30 A7 F9 1A 00 1F 00 FF FF FF FF 23 00 00 00 FF 52 5F AF 00 02 03 01 16 05 43 43 AF E7 CB 2B out 37 - ? key_input_v2 A3 22 00 39 3C 0A 0E E8 18 FD E0 B0 41 40 23 04 30 F2 C9 1D 09 3E A4 91 D9 8A CE 27 1B F1 48 EA 82 F4 E1 7C F2 in 6 A3 F9 02 00 69 00 out 4 - erase_chip_cmd_v2 A4 01 00 08 in 6 A4 F9 02 00 00 00 out 64 - write_cmd_v2 ? cmd length zero addrl addrh z z random A5 3D 00 00 00 00 00 22 data BD CC B6 62 50 B8 C5 26 real data - 01-90-FF-E4-F5-27-F5-28 49 75 6B 06 F3 8D 30 25 56 9F DC B1 81 04 12 CC F5-29-22-80-56-12-00-2B-EA-C3-95-37-24-9B-22-C2 2A 4E 49 AD 2F A8 BB 36 9E 29 80 46 D0 57 04 7B 96-12-00-2B-8A-37-8B-38-22-75-C9-C0-75-C8-34-75 24 0E 6B 03 28 B4 B5 85 96 B9 C4 33 8E 6A 9A 24 98-52-22-85-8D-2B-85-8B-2A-E5-8D-B5-2B-F5-AA-2A in 6 A5 F9 02 00 00 00 out 64 - write_cmd_v2 A5 3D 00 38 00 00 00 10 17 77 6B 79 5A 60 CF F1 43 A3 B6 46 75 EA E0 1E 7C BC 89 04 65 1C 00 D6 BF 4E 4A B3 95 46 33 1C BF 3D 99 05 75 1D E0 EE 6C 8C 7B 46 75 EA E0 06 7C BC 4C A0 40 B9 14 BE in 6 A5 F9 02 00 00 00 ... out 37 - ? key_input_v2 A3 22 00 52 55 23 27 01 31 16 F9 C9 5A 59 3C 1D 49 0B E2 36 22 57 BD AA F2 A3 E7 40 34 0A 61 03 9B 0D FA 95 0B in 6 A3 F9 02 00 75 00 out 64 - verify_cmd_v2 A6 3D 00 00 00 00 00 22 96 27 5F 05 49 D1 FE C1 62 9E 82 61 EA E4 0B C2 7D 74 35 D6 98 6D 29 2B 01 A5 A0 CA 36 C1 80 D1 B5 C2 69 21 C9 3E 3F 9C 0F E5 82 64 31 DD 8E 62 BD 52 2D 54 97 03 A1 C3 in 6 A6 F9 02 00 00 00 out 64 - verify_cmd_v2 A6 3D 00 38 00 00 00 10 3C 9C 82 1E 43 09 F4 16 68 48 5F 21 6C 83 DB F9 57 57 60 63 7C 75 3B 31 94 A5 A3 D4 8C 2F 08 FB 94 D6 70 62 6C 74 DB 09 47 67 92 21 6C 83 DB E1 57 57 A5 C7 59 D0 2F 59 in 6 A6 F9 02 00 00 00 ... out 4 - ? A2 01 00 00 in 6 A2 F9 02 00 00 00
А librech551 похоже действительно неправильно работает с новыми ch552
Binary length 1696 Now performing erase... Erase done Writing Flash Write to addr 0, pkt_length 56 Write to addr 56, pkt_length 56 Write to addr 112, pkt_length 56 *** Write to addr 1568, pkt_length 56 Write to addr 1624, pkt_length 56 Write to addr 1680, pkt_length 16 Write done Verifying Flash 0xA8 0xF9 Write to addr 0, pkt_length 56 Write failed!
Там ошибка похоже в 469 строчке https://github.com/rgwan/librech551/blo … isp/main.c
write_to_device(write_cmd_v1, 64);
а надо бы
write_to_device(verify_cmd_v2, 64);
Отредактировано vt (2019-06-28 08:53:24)
Поделиться1342019-06-28 09:32:36
Вот же говнюки эти китаезы!
Поделиться1352019-06-28 09:49:36
Такое впечатление, что они хотят сделать загрузку шифрованной прошивки [как у stc15]
Чтоб софтина могла шифровать файл, записывать ключ в мк, но пока какой-то промежуточный вариант, когда файл шифруют внутри самой софтины
Или я не понимаю зачем они это делают
Но как бы там не было, фирменная виндошная wchisptool работает с новыми ch55 без проблем, проблемы только с librech551
Отредактировано vt (2019-06-28 09:54:28)
Поделиться1362019-06-30 11:19:49
Алгоритм шифрования такой
К данным последовательно применяются 16, 6, 4, 24, 12, 18, 20 и 16 байты ключа
Первые семь по xor с key^sum, а восьмой по xor с (key^sum)+0x52
Где sum - сумма 22-25 байтов вычитанного из мк конфига [read_cfg_cmd_v2]
В этих байтах [которые суммируются] - chip id
То есть, в librech551 ещё ошибка в 398 строчке https://github.com/rgwan/librech551/blo … isp/main.c
Вместо
write_cmd_v2[j] ^= lastkey;
надо
write_cmd_v2[j+8] ^= 0x52
Это для записи, и то же в 467 строчке для верификации
И после этого librech551 работает с новыми ch552
Отредактировано vt (2019-06-30 21:25:27)
Поделиться1372019-07-08 14:09:07
вообще чепопало, хорошо что у меня виндовс ))
Никакой головной боли.
Китайцы начали заниматься дуростью похоже, видимо зарплаты с лишкой стали.
Отредактировано selevo (2019-07-08 14:10:58)
Поделиться1382019-07-09 16:02:39
Модуль uart с привязкой к стандартному вводу-выводу паскаля
С буферами fifo, т.е. ввод-вывод неблокирующий
unit uart; {$xdata} interface uses ch554; var idle, lf : byte; procedure poll; usingany; procedure rate ( baud : longint ); implementation const rmask = $FF; tmask = $3F; var rbuf : array [0..rmask] of byte xdata; tbuf : array [0..tmask] of byte xdata; rin, rout, tin, tout, tmp : byte; zlf : boolean; procedure poll; begin if ri then begin ri := false; rbuf[rin] := sbuf; if rbuf[rin] = system.lf then lf := lf + 1; rin := (rin + 1) and rmask; idle := 0; end else if idle < $FF then idle := idle + 1; if (tin <> tout) and ti then begin ti := false; sbuf := tbuf[tout]; tout := (tout + 1) and tmask; end; end; procedure rate; begin t2rcap2 := 0 - word( 1500000 div baud ); t2cnt := $FFF0; end; function read : byte; begin if zlf then begin zlf := false; tmp := system.lf; end else if rin = rout then begin zlf := true; tmp := 0; lf := 0; end else begin tmp := rbuf[rout]; rout := (rout + 1) and rmask; if (tmp = system.lf) and (lf > 0) then lf := lf - 1; end; result := tmp; end; procedure write; begin asm mov tmp, a end; tbuf[tin] := tmp; tin := (tin + 1) and tmask; end; begin assign( systemio, read, write ); idle := 0; lf := 0; rin := 0; rout := 0; tin := 0; tout := 0; zlf := false; t2mod := {tmr_clk t2_clk} $C0; t2con := {rclk tclk tr2} $34; scon := {sm1 ren ti} $52; rate( 9600 ); end.
Отредактировано vt (2019-09-11 20:31:15)
Поделиться1392019-07-25 19:49:28
Eddy_Em, ну и как тебе?
cdc на 552 не взлетело , без кварца кое-как до 57600 работает и усе .
559 что ли брать?
Поделиться1402019-07-25 20:22:40
Да он даже не начинал )
552 [и 551 и 554] по usb могут не только 57600 но и 5760000
Поделиться1412019-07-25 22:55:55
Могут, могут ... Только вот скорость без кварца увы и ах отличается и прилично...
На 24MHz выставляю 115200 получаю 125000 ...
Поделиться1422019-07-25 23:21:37
8% ?
Это странно, они бы не смогли тогда синхронизоваться по usb
У всех что я проверял было не больше 0.5%
Поделиться1432019-07-26 08:56:45
А может это ошибка расчета китайцами скорости UART?
Поделиться1442019-07-26 09:06:33
Похоже
24М / 16 / 115200 = 13.02
Если вместо 13 будет 12 или 14 то как раз будет где-то 8%
Поделиться1452019-07-26 09:28:33
Вот их каракули
void Config_Uart1(UINT8 *cfg_uart) { UINT32 uart1_buad = 0; *((UINT8 *)&uart1_buad) = cfg_uart[3]; *((UINT8 *)&uart1_buad+1) = cfg_uart[2]; *((UINT8 *)&uart1_buad+2) = cfg_uart[1]; *((UINT8 *)&uart1_buad+3) = cfg_uart[0]; IE_UART1 = 0; SBAUD1 = 0 - FREQ_SYS/16/uart1_buad; IE_UART1 = 1; }
void CfgFsys( ) { // SAFE_MOD = 0x55; // SAFE_MOD = 0xAA; // CLOCK_CFG |= bOSC_EN_XT; //ʹÄÜÍⲿ¾§Õñ // CLOCK_CFG &= ~bOSC_EN_INT; //¹Ø±ÕÄÚ²¿¾§Õñ SAFE_MOD = 0x55; SAFE_MOD = 0xAA; // CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x07; // 32MHz // CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x06; // 24MHz CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x05; // 16MHz // CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x04; // 12MHz // CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x03; // 6MHz // CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x02; // 3MHz // CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x01; // 750KHz // CLOCK_CFG = CLOCK_CFG & ~ MASK_SYS_CK_SEL | 0x00; // 187.5MHz SAFE_MOD = 0x00; } #define FREQ_SYS 16000000
И еще вопрос - у них по дефолту стояла частота 32МГц , по таблице сей режим не рабочий .
Спрашивается -накуа????
Поделиться1462019-07-26 09:37:09
16М/16/115200=8.68
Округление до 8 и даёт ошибку 8% [8/8.68]
Я всё только на 12 MГц делаю
Отредактировано vt (2019-07-26 09:46:27)
Поделиться1472019-07-26 09:47:48
С 24МГц так же .
Запилить свитч-кэйс вместо их волшебной формулы?
Поделиться1482019-07-26 09:48:36
vt, на 12Мгц та же хрень
Поделиться1492019-07-26 09:53:40
Это странно, с 24 всё должно быть точно, с 12 на 115200 тоже будет ошибка округления
У них доп делитель на 16 всё портит [у stc15 делитель 4 и всё проще]
Поделиться1502019-07-26 09:54:46
счас изображу .