diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index 471e8237893adde7f7cb9c511fb8e9b662c950c6..8c3e5ecd3b7c5353a9713945985c4be9931cff0e 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -654,12 +654,135 @@ static int DefaultWaitForDoneOp( void * dev, int ignore ) { int r; uint32_t rrv; + uint32_t temp; + + //Debug regdump pre-command + #if 0 + MCF.ReadReg32(dev, DMDATA0, &temp); + fprintf(stderr, "Pr-DMDATA0: %08x\n", temp); + + MCF.ReadReg32(dev, DMDATA1, &temp); + fprintf(stderr, "Pr-DMDATA1: %08x\n", temp); + + MCF.ReadReg32(dev, DMCONTROL, &temp); + fprintf(stderr, "Pr-DMCONTROL: %08x\n", temp); + + MCF.ReadReg32(dev, DMSTATUS, &temp); + fprintf(stderr, "Pr-DMSTATUS: %08x\n", temp); + + MCF.ReadReg32(dev, DMHARTINFO, &temp); + fprintf(stderr, "Pr-DMHARTINFO: %08x\n", temp); + + MCF.ReadReg32(dev, DMABSTRACTCS, &temp); + fprintf(stderr, "Pr-DMABSTRACTCS: %08x\n", temp); + + MCF.ReadReg32(dev, DMCOMMAND, &temp); + fprintf(stderr, "Pr-DMCOMMAND: %08x\n", temp); + + MCF.ReadReg32(dev, DMABSTRACTAUTO, &temp); + fprintf(stderr, "Pr-DMABSTRACTAUTO: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF0, &temp); + fprintf(stderr, "Pr-DMPROGBUF0: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF1, &temp); + fprintf(stderr, "Pr-DMPROGBUF1: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF2, &temp); + fprintf(stderr, "Pr-DMPROGBUF2: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF3, &temp); + fprintf(stderr, "Pr-DMPROGBUF3: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF4, &temp); + fprintf(stderr, "Pr-DMPROGBUF4: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF5, &temp); + fprintf(stderr, "Pr-DMPROGBUF5: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF6, &temp); + fprintf(stderr, "Pr-DMPROGBUF6: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF7, &temp); + fprintf(stderr, "Pr-DMPROGBUF7: %08x\n", temp); + + MCF.ReadReg32(dev, DMCPBR, &temp); + fprintf(stderr, "Pr-DMCPBR: %08x\n", temp); + + MCF.ReadReg32(dev, DMCFGR, &temp); + fprintf(stderr, "Pr-DMCFGR: %08x\n", temp); + + MCF.ReadReg32(dev, DMSHDWCFGR, &temp); + fprintf(stderr, "Pr-DMSHDWCFGR: %08x\n", temp); + #endif + do { r = MCF.ReadReg32( dev, DMABSTRACTCS, &rrv ); if( r ) return r; } while( rrv & (1<<12) ); + + //Debug regdump post-command + #if 0 + MCF.ReadReg32(dev, DMDATA0, &temp); + fprintf(stderr, "Po-DMDATA0: %08x\n", temp); + + MCF.ReadReg32(dev, DMDATA1, &temp); + fprintf(stderr, "Po-DMDATA1: %08x\n", temp); + + MCF.ReadReg32(dev, DMCONTROL, &temp); + fprintf(stderr, "Po-DMCONTROL: %08x\n", temp); + + MCF.ReadReg32(dev, DMSTATUS, &temp); + fprintf(stderr, "Po-DMSTATUS: %08x\n", temp); + + MCF.ReadReg32(dev, DMHARTINFO, &temp); + fprintf(stderr, "Po-DMHARTINFO: %08x\n", temp); + + MCF.ReadReg32(dev, DMABSTRACTCS, &temp); + fprintf(stderr, "Po-DMABSTRACTCS: %08x\n", temp); + + MCF.ReadReg32(dev, DMCOMMAND, &temp); + fprintf(stderr, "Po-DMCOMMAND: %08x\n", temp); + + MCF.ReadReg32(dev, DMABSTRACTAUTO, &temp); + fprintf(stderr, "Po-DMABSTRACTAUTO: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF0, &temp); + fprintf(stderr, "Po-DMPROGBUF0: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF1, &temp); + fprintf(stderr, "Po-DMPROGBUF1: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF2, &temp); + fprintf(stderr, "Po-DMPROGBUF2: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF3, &temp); + fprintf(stderr, "Po-DMPROGBUF3: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF4, &temp); + fprintf(stderr, "Po-DMPROGBUF4: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF5, &temp); + fprintf(stderr, "Po-DMPROGBUF5: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF6, &temp); + fprintf(stderr, "Po-DMPROGBUF6: %08x\n", temp); + + MCF.ReadReg32(dev, DMPROGBUF7, &temp); + fprintf(stderr, "Po-DMPROGBUF7: %08x\n", temp); + + MCF.ReadReg32(dev, DMCPBR, &temp); + fprintf(stderr, "Po-MCPBR: %08x\n", temp); + + MCF.ReadReg32(dev, DMCFGR, &temp); + fprintf(stderr, "Po-DMCFGR: %08x\n", temp); + + MCF.ReadReg32(dev, DMSHDWCFGR, &temp); + fprintf(stderr, "Po-DMSHDWCFGR: %08x\n", temp); + #endif + if( (rrv >> 8 ) & 7 ) { if( !ignore ) @@ -676,7 +799,6 @@ static int DefaultWaitForDoneOp( void * dev, int ignore ) default: errortext = "Other Error"; break; } - uint32_t temp; MCF.ReadReg32( dev, DMSTATUS, &temp ); fprintf( stderr, "Fault writing memory (DMABSTRACTS = %08x) (%s) DMSTATUS: %08x\n", rrv, errortext, temp ); } @@ -1215,7 +1337,8 @@ static int DefaultReadWord( void * dev, uint32_t address_to_read, uint32_t * dat } MCF.WriteReg32( dev, DMDATA1, address_to_read ); - MCF.WriteReg32( dev, DMCOMMAND, 0x00241000 ); // Only execute. + //MCF.WriteReg32( dev, DMCOMMAND, 0x00241000 ); // Only execute. //AH removed as part of CH32V307 discussion + MCF.WriteReg32( dev, DMCOMMAND, 0x00261000 ); //AH replacement based on that discussion iss->statetag = STTAG( "RDSQ" ); iss->currentstateval = address_to_read; @@ -1800,7 +1923,7 @@ int DefaultPrintChipInfo( void * dev ) { uint32_t reg; MCF.HaltMode( dev, 5 ); - + if( MCF.ReadWord( dev, 0x1FFFF800, ® ) ) goto fail; printf( "USER/RDPR : %04x/%04x\n", reg>>16, reg&0xFFFF ); if( MCF.ReadWord( dev, 0x1FFFF804, ® ) ) goto fail; diff --git a/minichlink/pgm-wch-linke.c b/minichlink/pgm-wch-linke.c index 70c43eba8571425820b95f1c484f6f02ba1fefd1..c07468846d57a5dd83deb1bbe79bc1b38c985322 100644 --- a/minichlink/pgm-wch-linke.c +++ b/minichlink/pgm-wch-linke.c @@ -245,7 +245,20 @@ static int LESetupInterface( void * d ) MCF.WriteReg32( d, DMCONTROL, 0x80000001 ); // No, really make sure. MCF.WriteReg32( d, DMABSTRACTCS, 0x00000700 ); // Ignore any pending errors. MCF.WriteReg32( d, DMABSTRACTAUTO, 0 ); - MCF.WriteReg32( d, DMCOMMAND, 0x00261000 ); // Read x0 (Null command) + //MCF.WriteReg32( d, DMCOMMAND, 0x00261000 ); // Read x0 (Null command) //AH changed as part of CH32V307 discussion + MCF.WriteReg32( d, DMCOMMAND, 0x00221000 ); // Read x0 (Null command) //AH replacement based on that discussion + + int r = 0; + + r |= MCF.WaitForDoneOp( d, 0 ); + if( r ) + { + fprintf( stderr, "Fault on setup\n" ); + } + else + { + fprintf( stderr, "Setup success\n" ); + } // This puts the processor on hold to allow the debugger to run. wch_link_command( dev, "\x81\x11\x01\x09", 4, (int*)&transferred, rbuff, 1024 ); // Reply: Chip ID + Other data (see below)