Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » Архив » CH55x (CH551 CH552 CH554)


CH55x (CH551 CH552 CH554)

Сообщений 121 страница 150 из 162

121

Запаял бы ты лучше для начала мк на самую простую макетку [плюс две ёмкости на +5 и +3.3, резистор 10к на d+ и usb-проводок от какой-нибудь сдохшей мыши]
А так твоя платка лишний фактор неопределённости

122

Фигня какая-то постоянно считывается: первым байтом идет первый байт из предыдущей последовательности, которая писалась в МК, а дальше — набор байт, разный в разных чипах. Например, запрос на серию:

Код:
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)

123

Похоже для начала лучше ещё и настоящую виндошную wchisptool )
librech551 - рабочая программа, я её проверял

124

Ну, не знаю, как ты ее проверял: я скачал с гитхаба, скомпилял. Нашел пару багов.
Ты, кстати, если запустишь "девственную" wchisptool с ключом -h, то справки увидеть не должен.
Ну или я скачал не с той репы. Но вроде бы на гитхабе только одна есть. Не знаю, зачем ее обозвали librech551, если там лежит wchisptool, да еще и кривой…

125

Eddy_Em написал(а):

Не знаю, зачем ее обозвали librech551, если там лежит wchisptool, да еще и кривой…

librech551 это вовсе не wchisptool, автор напрасно использовал то же самое название
Я librech551 "портировал" под tcc [ссылка на предыдущей странице]

Отредактировано vt (2019-06-11 10:10:39)

126

Eddy_Em написал(а):

Интересно, что у вас в этом буфере.

Код:
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

127

С новым пробовал, тоже такие мысли пришли - не работает...

128

Eddy_Em написал(а):

С новым пробовал, тоже такие мысли пришли - не работает...

а платки какие? может все таки засветишь?
я с этими мк дело не имел. и по-ходу в ближайшее время дел иметь не буду. нету их. но как мне кажется начать надо CH55x (CH551-CH554)
свести все к минимуму. а потом уже разворачиваться. или я не в курсе чего-то.

Отредактировано RA (2019-06-16 23:30:37)

129

Вот такая "девборда", для STM32 в lqfp48 дурища еще больше, но там косяков нет, даже кварц нормально завелся на STM32F103 (хотя основное предназначение платы - STM32F0x2).
Еще раз повторю: если бы были косяки с разводкой, то компьютер бы не определил устройство! У меня же все ОК, и dmesg показывает, что появился бутлоадер. Таким образом, главный косяк - прошивальщик.
И пока я не увижу нормальный английский даташит на прошивальщик, чтобы можно было допилить то китайское творение, никаких работ с этими МК проводить смысла нет.
Как последний вариант - в виртуалбоксе под хрюнделем или спермеркой поставить китайскую вантузоидную прошивалку и попробовать ею. Если взлетит, то реверсить и дописывать прошивальщик.

130

Eddy_Em написал(а):

И пока я не увижу нормальный английский даташит на прошивальщик

Никогда не увидишь

Eddy_Em написал(а):

Как последний вариант - в виртуалбоксе под хрюнделем или спермеркой поставить китайскую вантузоидную прошивалку и попробовать ею.

Это должен был быть самый первый вариант [и не в виртуалбоксе], а потом уже все остальные телодвижения

Заказал ещё ch552g, приедут - посмотрю, что в них изменилось [если изменилось]

Отредактировано vt (2019-06-17 09:33:51)

131

vt написал(а):

Это должен был быть самый первый вариант [и не в виртуалбоксе]

Вот делать мне нечего - искать где-то игровую приставку... А виртуалбокс я на любом компьютере запустить могу!

132

Сам себе создаёшь проблемы и потом героически преодолеваешь

Отредактировано vt (2019-09-20 15:58:42)

133

Бутлоадер у новых 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)

134

Вот же говнюки эти китаезы!

135

Такое впечатление, что они хотят сделать загрузку шифрованной прошивки [как у stc15]
Чтоб софтина могла шифровать файл, записывать ключ в мк, но пока какой-то промежуточный вариант, когда файл шифруют внутри самой софтины
Или я не понимаю зачем они это делают

Но как бы там не было, фирменная виндошная wchisptool работает с новыми ch55 без проблем, проблемы только с librech551

Отредактировано vt (2019-06-28 09:54:28)

136

Алгоритм шифрования такой
К данным последовательно применяются 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)

137

вообще чепопало, хорошо что у меня виндовс ))
Никакой головной боли.
Китайцы начали заниматься дуростью похоже, видимо зарплаты с лишкой  стали.

Отредактировано selevo (2019-07-08 14:10:58)

138

Модуль 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)

139

Eddy_Em, ну и как тебе?
  cdc на 552 не взлетело , без кварца кое-как  до 57600 работает и усе .
  559 что ли брать?

140

Да он даже не начинал )
552 [и 551 и 554] по usb могут не только 57600 но и 5760000

141

Могут, могут ... Только вот скорость без кварца увы и ах отличается и прилично...
На 24MHz выставляю 115200 получаю 125000 ...

142

8% ?
Это странно, они бы не смогли тогда синхронизоваться по usb
У всех что я проверял было не больше 0.5%

143

А может это ошибка расчета китайцами скорости UART?

144

Похоже
24М / 16 / 115200 = 13.02
Если вместо 13 будет 12 или 14 то как раз будет где-то 8%

145

Вот  их каракули

Код:
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МГц , по таблице сей режим не рабочий .
Спрашивается -накуа????

146

16М/16/115200=8.68
Округление до 8 и даёт ошибку 8% [8/8.68]

Я всё только на 12 MГц делаю

Отредактировано vt (2019-07-26 09:46:27)

147

С 24МГц так же .
Запилить свитч-кэйс вместо их волшебной формулы?

148

vt, на 12Мгц та же хрень

149

Это странно, с 24 всё должно быть точно, с 12 на 115200 тоже будет ошибка округления
У них доп делитель на 16 всё портит [у stc15 делитель 4 и всё проще]

150

счас изображу .


Вы здесь » Микроконтроллеры » Архив » CH55x (CH551 CH552 CH554)