/******************************************************************** * PICライター系コマンド受信と実行. ******************************************************************** * Cmd0 : 0x10〜0x1F */ void cmd_picspx(void) { led_blink(8); #if PICAVR_WRITER if( Cmd0==PICSPX_SETCMD16L) { pic_setcmd16L(); } else if(Cmd0==PICSPX_SETADRS24) { setaddress24(); } else if(Cmd0==PICSPX_GETDATA8L) { pic_getdata8L(); } else if(Cmd0==PICSPX_BITBANG) { pic_bitbang(); } else if(Cmd0==PICSPX_BITREAD) { pic_bitbang(); } #if SUPPORT_PIC24F else if(Cmd0==PICSPX_WRITE24F) { pic_write24f(); } else if(Cmd0==PICSPX_READ24F) { pic_read24f(); } #endif else #endif #if INCLUDE_JTAG_CMD if(Cmd0==HIDASP_JTAG_WRITE) { jtag_command(0); } else if(Cmd0==HIDASP_JTAG_READ) { jtag_command(1); } else if(Cmd0==HIDASP_JTAG_CTRLW) { jtag_control(0); } else if(Cmd0==HIDASP_JTAG_CTRLR) { jtag_control(1); } #endif // else if(Cmd0==PICSPX_SETPGM) {pic_setpgm();} ToPcRdy = Cmd0 & 1; // LSBがOnなら返答が必要. }
int main (void) { type_jtagnode node; int const probe_width = 16; UCHAR buffer [(probe_width >> 3) + 1]; int ret = 0, val = 0; int k = 0, n = 0; int const required_bytes = 100000; FILE * f = NULL; bool bad_sample = false; int next_status = 0; f = fopen ("c_probe.bin","wb"); if (!f) { fprintf (stdout,"Unable to write dump file\n"); return (1); } ret = jtag_init(0,0,0,0,C_PROBE_ID,0,"jtag_c_probe", 1, &node); if (ret < 0) { printf("\nfailed to find jtag node"); return 0; } fprintf (stdout,"\n\nCapturing %d bytes to c_probe.bin...\n",required_bytes); k=0; while (k<required_bytes) { if (k >= next_status) { fprintf (stdout,"%d pct complete\n", k * 100 / required_bytes); next_status += 2000; } // read from probe. To write reverse 0 and buffer args jtag_command(&node, 0, probe_width, 0, buffer); if (buffer[1] == 0 && buffer[0] == 0) { // probe isn't ready } else { bad_sample = false; for (n=0; n<2; n++) { if (buffer[n] >= 'A' && buffer[n] <= 'F') { buffer[n] = buffer[n] - 'A' + 10; } else if (buffer[n] >= 'a' && buffer[n] <= 'f') { buffer[n] = buffer[n] - 'a' + 10; } else if (buffer[n] >= '0' && buffer[n] <= '9') { buffer[n] = buffer[n] - '0'; } else { bad_sample = true; } } if (bad_sample) { fprintf (stdout,"Read bad sample - link is corrupt?\n"); } else { val = buffer[1]; val <<= 4; val |= buffer[0]; fprintf (f,"%c",val); k++; } } } jtag_close(&node); fclose (f); fprintf (stdout,"done\n"); return (0); }