diff --git a/src/pickit5.c b/src/pickit5.c index 78104144..4be59636 100644 --- a/src/pickit5.c +++ b/src/pickit5.c @@ -804,13 +804,16 @@ static int pickit5_set_sck_period(const PROGRAMMER *pgm, double sckperiod) { const unsigned char *set_speed = my.scripts.SetSpeed; unsigned int set_speed_len = my.scripts.SetSpeed_len; unsigned char buf[4]; - if (set_speed_len > 0) { // debugWire is fun . . . - pickit5_uint32_to_array(buf, frq); - if(pickit5_send_script(pgm, SCR_CMD, set_speed, set_speed_len, buf, 4, 0) >= 0) { - if(pickit5_read_response(pgm) >= 0) - return 0; - } + if (set_speed == NULL) { // debugWire is fun . . . + return 0; // No script, to execute, return success } + + pickit5_uint32_to_array(buf, frq); + if(pickit5_send_script(pgm, SCR_CMD, set_speed, set_speed_len, buf, 4, 0) >= 0) { + if(pickit5_read_response(pgm) >= 0) + return 0; + } + pmsg_error("Failed to set speed.\n"); return -1; } @@ -1346,8 +1349,11 @@ static int pickit5_isp_write_fuse(const PROGRAMMER *pgm, const AVRMEM *mem, unsi avr_set_bits(mem->op[AVR_OP_WRITE], (unsigned char*)&cmd); avr_set_addr(mem->op[AVR_OP_WRITE], (unsigned char*)&cmd, mem_fuse_offset(mem)); avr_set_input(mem->op[AVR_OP_WRITE], (unsigned char*)&cmd, value); - cmd = __builtin_bswap32(cmd); // Swap bitorder - pickit5_uint32_to_array(&write_fuse_isp[11], cmd); // fill programming command + + write_fuse_isp[14] = (uint8_t) cmd; // swap bitorder and fill array + write_fuse_isp[13] = (uint8_t) (cmd >> 8); + write_fuse_isp[12] = (uint8_t) (cmd >> 16); + write_fuse_isp[11] = (uint8_t) (cmd >> 24); if(pickit5_send_script_cmd(pgm, write_fuse_isp, write_fuse_isp_len, NULL, 0) < 0) { pmsg_error("Write Fuse Script failed"); @@ -1373,8 +1379,11 @@ static int pickit5_isp_read_fuse(const PROGRAMMER *pgm, const AVRMEM *mem, unsig unsigned int cmd; avr_set_bits(mem->op[AVR_OP_READ], (unsigned char*)&cmd); avr_set_addr(mem->op[AVR_OP_READ], (unsigned char*)&cmd, mem_fuse_offset(mem)); - cmd = __builtin_bswap32(cmd); // Swap bitorder - pickit5_uint32_to_array(&read_fuse_isp[11], cmd); // fill programming command + + read_fuse_isp[14] = (uint8_t) cmd; // swap bitorder and fill array + read_fuse_isp[13] = (uint8_t) (cmd >> 8); + read_fuse_isp[12] = (uint8_t) (cmd >> 16); + read_fuse_isp[11] = (uint8_t) (cmd >> 24); if(pickit5_send_script_cmd(pgm, read_fuse_isp, read_fuse_isp_len, NULL, 0) < 0) { pmsg_error("Read Fuse Script failed"); diff --git a/src/pickit5_lut_dw.c b/src/pickit5_lut_dw.c index 8284c37f..29b248c6 100644 --- a/src/pickit5_lut_dw.c +++ b/src/pickit5_lut_dw.c @@ -35,9 +35,6 @@ const unsigned char ExitProgMode_dw_0[31] = { 0x1e, 0x4e, 0x90, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x1e, 0x40, 0x0c, 0x1e, 0x51, 0x1e, 0x4c, }; -const unsigned char SetSpeed_dw_0[0] = { -}; - const unsigned char EraseChip_dw_0[1] = { 0xaf, }; @@ -4199,7 +4196,6 @@ static void pickit_dw_script_init(SCRIPT *scr) { scr->EnterProgMode = EnterProgMode_dw_0; scr->ExitProgMode = ExitProgMode_dw_0; - scr->SetSpeed = SetSpeed_dw_0; scr->EraseChip = EraseChip_dw_0; scr->WriteMem8 = WriteMem8_dw_0; scr->switchtoISP = switchtoISP_dw_0; @@ -4207,7 +4203,6 @@ static void pickit_dw_script_init(SCRIPT *scr) { scr->EnterProgMode_len = sizeof(EnterProgMode_dw_0); scr->ExitProgMode_len = sizeof(ExitProgMode_dw_0); - scr->SetSpeed_len = sizeof(SetSpeed_dw_0); scr->EraseChip_len = sizeof(EraseChip_dw_0); scr->WriteMem8_len = sizeof(WriteMem8_dw_0); scr->switchtoISP_len = sizeof(switchtoISP_dw_0); diff --git a/tools/scripts_decoder.py b/tools/scripts_decoder.py index 9a58b076..bafb3cd6 100644 --- a/tools/scripts_decoder.py +++ b/tools/scripts_decoder.py @@ -303,8 +303,8 @@ def convert_xml(xml_path, c_funcs): func_bytes = bytes(scr_bytes_buffer[:counter]) # create an immutable bytes array break - if func_bytes == None: - continue # continue with next chip if somethin went wrong + if func_bytes == None or len(func_bytes) == 0: + continue # continue with next chip if somethin went wrong or is empty (SetSpeed_dw) if function_name not in function_dict[programming_mode].keys(): function_dict[programming_mode][function_name] = []