diff -Naurw ./old/microgdbstub.h ./new/microgdbstub.h --- ./old/microgdbstub.h 2025-02-05 14:31:54.679397633 +0100 +++ ./new/microgdbstub.h 2025-02-05 12:22:13.979925751 +0100 @@ -286,6 +286,7 @@ int mslen = strlen( MICROGDBSTUB_MEMORY_MAP ) + 32; char map[mslen]; struct InternalState * iss = (struct InternalState*)(((struct ProgrammerStructBase*)dev)->internal); + printf("flash=0x%X, ss=%d, ram=0x%X\n", iss->flash_size, iss->sector_size, iss->ram_size); snprintf( map, mslen, MICROGDBSTUB_MEMORY_MAP, iss->flash_size, iss->sector_size, iss->ram_size ); SendReplyFull( map ); } diff -Naurw ./old/minichlink.c ./new/minichlink.c --- ./old/minichlink.c 2025-02-05 14:31:54.683397570 +0100 +++ ./new/minichlink.c 2025-02-05 13:59:27.185611922 +0100 @@ -78,7 +78,7 @@ struct InternalState * iss = calloc( 1, sizeof( struct InternalState ) ); ((struct ProgrammerStructBase*)dev)->internal = iss; iss->ram_base = 0x20000000; - iss->ram_size = 2048; + iss->ram_size = 4*0x400; // minimal size for CH32V003 iss->sector_size = 64; iss->flash_size = 16384; iss->target_chip_type = 0; diff -Naurw ./old/pgm-wch-linke.c ./new/pgm-wch-linke.c --- ./old/pgm-wch-linke.c 2025-02-05 14:31:54.683397570 +0100 +++ ./new/pgm-wch-linke.c 2025-02-05 13:40:17.011872846 +0100 @@ -413,7 +413,8 @@ fprintf( stderr, "Error: could not get part status\n" ); return -1; } - fprintf( stderr, "Flash Storage: %d kB\n", (rbuff[2]<<8) | rbuff[3] ); // Is this Flash size? + const uint32_t flskb = ((uint32_t)rbuff[2]<<8) | rbuff[3]; + fprintf( stderr, "Flash Storage: %d kB\n", flskb ); // Is this Flash size? fprintf( stderr, "Part UUID : %02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x\n", rbuff[4], rbuff[5], rbuff[6], rbuff[7], rbuff[8], rbuff[9], rbuff[10], rbuff[11] ); fprintf( stderr, "PFlags : %02x-%02x-%02x-%02x\n", rbuff[12], rbuff[13], rbuff[14], rbuff[15] ); fprintf( stderr, "Part Type (B): %02x-%02x-%02x-%02x\n", rbuff[16], rbuff[17], rbuff[18], rbuff[19] ); @@ -431,7 +432,11 @@ fprintf(stderr, "Read protection: disabled\n"); } - iss->flash_size = ((rbuff[2]<<8) | rbuff[3])*1024; + iss->flash_size = flskb * 0x400u; + if (chip == CHIP_CH32V20x) { // diferent version chip + if (flskb > 32u) iss->ram_size = 20u * 0x400u; // 64K + else iss->ram_size = 10u * 0x400u; // 32K + } return 0; }