Мля, весьма странно, скомпилил на 24МГц - счас в putty выставил 115200 - в анализаторе 117647 , 57600 -57971, 38400 -38461,300000-307692,500000-500000
CH55x (CH551 CH552 CH554)
Сообщений 151 страница 162 из 162
Поделиться1522019-07-26 10:09:45
Да, но на 24Мгц получится облом - работать будет только если vcc- 5v, а это и на пинах будет 5v .
Почему и перешел на 16МГц -а здесь и на 12 уже ошибка рассчета...
Поделиться1532019-07-26 10:11:47
500000-500000
Вот она точность 24М/16/500000=3.00000 )
Поделиться1542019-07-26 10:16:39
Перешел на 12 и вот они приколы - 38400 -39215 ,57600-57971, 115200-125000, 300000-400000,500000-800000
Видел подобный вопрос на форуме WCH , но там вопрошающий почему уверен что частота не стабильна.
Мне же видиться тупой просчет с делителями , а скорей облом с из-за делителя.
Ему там советуют перейти на 559 . СЧа попробую найти
Поделиться1552019-07-26 10:20:07
Да, на 12 только 4800, 9600, 19200 и 57600
Поделиться1562019-07-26 10:22:00
vt, а это уже крест на 552 в cdc , точней как UART-USB ...
Поделиться1572019-08-01 16:43:22
Модуль CS1237 CS1238
unit cs1237;
interface
var
command, register : byte;
data : longint;
pinc, pind : boolean absolute forward; volatile;
function poll : boolean;
implementation
function poll;
var
a : array [0..3] of byte absolute data;
c, i, r : byte;
begin
if pind = false then begin
c := command;
r := register;
for i := 1 to 46 do begin
pinc := true;
case i of
1..8 : a[2] := (a[2] shl 1) + byte( pind );
9..16 : a[1] := (a[1] shl 1) + byte( pind );
17..24 : a[0] := (a[0] shl 1) + byte( pind );
27 : if (c <> $56) and (c <> $65) then break;
30..36 : begin
c := c shl 1;
pind := boolean( c and $80 );
end;
37 : pind := true;
38..45 : if command = {write} $65 then begin
pind := boolean( r and $80 );
r := r shl 1;
end else register := (register shl 1) + byte( pind );
46 : pind := true;
end;
pinc := false;
end;
if a[2] < $80 then a[3] := 0 else a[3] := $FF;
result := true;
end else result := false;
pinc := false;
end;
begin
command := $65;
register := $10;
end.И пример использования
uses clock, time, usb, cs1237;
var
led : boolean absolute p3.2;
cs1237.pinc : boolean absolute p1.7;
cs1237.pind : boolean absolute p1.5;
m : record
sec : word;
adc : longint
end absolute usb.buf[1].t;
begin
repeat
time.poll;
usb.poll;
if cs1237.poll then m.adc := cs1237.data;
led := time.cs > 50;
m.sec := time.s;
if usb.len[1].r > 0 then begin
move( usb.buf[1].r, usb.buf[1].t, 64 );
usb.len[1].r := 0;
end;
if usb.len[1].t = 0 then usb.len[1].t := 64;
until false;
end.Отредактировано vt (2019-08-12 17:23:41)
Поделиться1582019-08-04 20:22:51
57600 вполне хватит мне
Поделиться1592019-08-13 11:05:49
Неожиданное применение CH552 )
https://micro-pi.ru/maixduino-sbc-risc- … ino-esp32/
А вот и софт нашёлся
CH552 Dual USB to Serial Bridge for Sipeed K210 & ESP32
https://github.com/diodep/ch55x_dualserial
Отредактировано vt (2019-08-13 16:45:44)
Поделиться1602019-08-13 20:47:30
А это, наоборот, ожиданное )


https://www.aliexpress.com/af/minpro.html
Burning speed:
We use GD25Q80 as the real test data to ensure the fairness of the test, and compare the same full data file on the same computer.
Minpro erase + burn + test Total time 20 seconds
CH341A erasing + burning + effect Total time 53 seconds
Burning speed far exceeds CH341A programmer
Поделиться1612019-08-15 09:56:53
How To Program CH551G (Cheap uC From LCSC.com)
https://www.youtube.com/watch?v=a3XSIRkeubE
Ну и от себя добавлю к этому в таком же стиле
Беру два файла Turbo51 [и больше ничего, компилятор сам знает периферию 8051]
turbo51.exe - 274432 байт
turbo51.l51 - 113168 байт
Делаю третий - test.pas
begin
p3.2 := false
end.Делаю четвёртый командой turbo51 test.pas
test.bin - 7 байт
Это всё - светодиод горит )
Отредактировано vt (2019-08-15 11:09:48)
Поделиться1622019-08-27 07:39:27
Минималистичный программатор для новых ch552
#include <stdio.h>
#include "libusb.h"
libusb_device_handle *devh;
char buf[64];
char chip[] = "\xA1\x12\x00\x52\x11MCU ISP & WCH.CN";
char final[] = {0xA2, 1, 0, 0};
char key[43] = {0xA3, 40, 0};
char erase[] = {0xA4, 1, 0, 8};
char write[64] = {0xA5, 61, 0, 0, 0, 0, 0, 0};
char verify[64] = {0xA6, 61, 0, 0, 0, 0, 0, 0};
char info[] = {0xA7, 2, 0, 0x1F, 0};
char xxx[] = {0xA8, 14, 0, 7, 0, 0xFF, 0xFF, 0xFF, 0xFF, 3, 0, 0, 0, 0xFF, 0x52, 0, 0};
int usb ( unsigned char *data, int olen, int ilen ) {
int inum, iret, onum, oret;
if (!devh) {
libusb_init( NULL );
devh = libusb_open_device_with_vid_pid( NULL, 0x4348, 0x55E0 );
libusb_claim_interface( devh, 0 );
}
if (olen) {
oret = libusb_bulk_transfer( devh, 2, data, olen, &onum, 100 );
iret = libusb_bulk_transfer( devh, 0x82, buf, ilen, &inum, 1000 );
// for (int i = 0; i < inum; i++) printf( "%02X ", buf[i] & 0xFF );
}
if (!olen || oret || iret) {
libusb_release_interface( devh, 0 );
libusb_close( devh );
libusb_exit( NULL );
exit( oret | iret );
} else return inum;
}
int main ( int argc, char **argv ) {
int a = 0, i, n, s;
FILE *f;
if ((f = fopen( argv[1], "rb" )) == NULL) exit( -1 );
// printf( "chip %d\n", usb( chip, sizeof(chip)-1, 6 ));
// printf( "info %d\n", usb( info, sizeof(info), 30 ));
printf( "xxx %d\n", usb( xxx, sizeof(xxx), 6 ));
printf( "info %d\n", usb( info, sizeof(info), 30 ));
s = buf[22] + buf[23] + buf[24] + buf[25];
for (i = 3; i < 43; i++) key[i] = s & 0xFF;
printf( "key %d\n", usb( key, sizeof(key), 6 ));
printf( "erase %d\n", usb( erase, sizeof(erase), 6 ));
do {
if (!(n = fread( buf, 1, 56, f ))) break;
for (i = 0; i < n; i++) if (i % 8 == 7) buf[i] ^= 0x52;
write[1] = (n + 5) & 0xFF;
write[3] = a & 0xFF;
write[4] = (a >> 8) & 0xFF;
memcpy( write + 8, buf, n );
printf( "write %d %d %d\n", a, n, usb( write, n + 8, 6 ));
a += n;
} while (n == 56);
/*
a = 0;
rewind( f );
do {
if (!(n = fread( buf, 1, 56, f ))) break;
for (i = 0; i < n; i++) if (i % 8 == 7) buf[i] ^= 0x52;
verify[1] = (n + 5) & 0xFF;
verify[3] = a & 0xFF;
verify[4] = (a >> 8) & 0xFF;
memcpy( verify + 8, buf, n );
printf( "verify %d %d %d\n", a, n, usb( verify, n + 8, 6 ));
a += n;
} while (n == 56);
*/
printf( "final %d\n", usb( final, sizeof(final), 6 ));
usb( buf, 0, 0 );
}Отредактировано vt (2019-08-27 19:17:56)