Skip to content

Commit

Permalink
Implementation of NVM v4 protocol for #1621
Browse files Browse the repository at this point in the history
  • Loading branch information
dbuchwald committed Jan 20, 2024
1 parent 45b5365 commit 1b0b263
Show file tree
Hide file tree
Showing 7 changed files with 585 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,8 @@ add_library(libavrdude
updi_nvm_v2.h
updi_nvm_v3.c
updi_nvm_v3.h
updi_nvm_v4.c
updi_nvm_v4.h
updi_nvm_v5.c
updi_nvm_v5.h
updi_readwrite.c
Expand Down
2 changes: 2 additions & 0 deletions src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,8 @@ libavrdude_a_SOURCES = \
updi_nvm_v2.h \
updi_nvm_v3.c \
updi_nvm_v3.h \
updi_nvm_v4.c \
updi_nvm_v4.h \
updi_nvm_v5.c \
updi_nvm_v5.h \
urclock.c \
Expand Down
5 changes: 5 additions & 0 deletions src/serialupdi.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,11 @@ static int serialupdi_decode_sib(const PROGRAMMER *pgm, updi_sib_info *sib_info)
updi_set_nvm_mode(pgm, UPDI_NVM_MODE_V3);
updi_set_datalink_mode(pgm, UPDI_LINK_MODE_24BIT);
break;
case '4':
pmsg_notice("NVM type 4: 24-bit, word oriented\n");
updi_set_nvm_mode(pgm, UPDI_NVM_MODE_V4);
updi_set_datalink_mode(pgm, UPDI_LINK_MODE_24BIT);
break;
case '5':
pmsg_notice("NVM type 5: 24-bit, page oriented\n");
updi_set_nvm_mode(pgm, UPDI_NVM_MODE_V5);
Expand Down
21 changes: 21 additions & 0 deletions src/updi_nvm.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "updi_nvm_v0.h"
#include "updi_nvm_v2.h"
#include "updi_nvm_v3.h"
#include "updi_nvm_v4.h"
#include "updi_nvm_v5.h"
#include "updi_state.h"

Expand All @@ -50,6 +51,8 @@ int updi_nvm_chip_erase(const PROGRAMMER *pgm, const AVRPART *p) {
return updi_nvm_chip_erase_V2(pgm, p);
case UPDI_NVM_MODE_V3:
return updi_nvm_chip_erase_V3(pgm, p);
case UPDI_NVM_MODE_V4:
return updi_nvm_chip_erase_V4(pgm, p);
case UPDI_NVM_MODE_V5:
return updi_nvm_chip_erase_V5(pgm, p);
default:
Expand All @@ -67,6 +70,8 @@ int updi_nvm_erase_flash_page(const PROGRAMMER *pgm, const AVRPART *p, uint32_t
return updi_nvm_erase_flash_page_V2(pgm, p, address);
case UPDI_NVM_MODE_V3:
return updi_nvm_erase_flash_page_V3(pgm, p, address);
case UPDI_NVM_MODE_V4:
return updi_nvm_erase_flash_page_V4(pgm, p, address);
case UPDI_NVM_MODE_V5:
return updi_nvm_erase_flash_page_V5(pgm, p, address);
default:
Expand All @@ -84,6 +89,8 @@ int updi_nvm_erase_eeprom(const PROGRAMMER *pgm, const AVRPART *p) {
return updi_nvm_erase_eeprom_V2(pgm, p);
case UPDI_NVM_MODE_V3:
return updi_nvm_erase_eeprom_V3(pgm, p);
case UPDI_NVM_MODE_V4:
return updi_nvm_erase_eeprom_V4(pgm, p);
case UPDI_NVM_MODE_V5:
return updi_nvm_erase_eeprom_V5(pgm, p);
default:
Expand All @@ -101,6 +108,8 @@ int updi_nvm_erase_user_row(const PROGRAMMER *pgm, const AVRPART *p, uint32_t ad
return updi_nvm_erase_user_row_V2(pgm, p, address, size);
case UPDI_NVM_MODE_V3:
return updi_nvm_erase_user_row_V3(pgm, p, address, size);
case UPDI_NVM_MODE_V4:
return updi_nvm_erase_user_row_V4(pgm, p, address, size);
case UPDI_NVM_MODE_V5:
return updi_nvm_erase_user_row_V5(pgm, p, address, size);
default:
Expand All @@ -118,6 +127,8 @@ int updi_nvm_write_flash(const PROGRAMMER *pgm, const AVRPART *p, uint32_t addre
return updi_nvm_write_flash_V2(pgm, p, address, buffer, size);
case UPDI_NVM_MODE_V3:
return updi_nvm_write_flash_V3(pgm, p, address, buffer, size);
case UPDI_NVM_MODE_V4:
return updi_nvm_write_flash_V4(pgm, p, address, buffer, size);
case UPDI_NVM_MODE_V5:
return updi_nvm_write_flash_V5(pgm, p, address, buffer, size);
default:
Expand All @@ -135,6 +146,8 @@ int updi_nvm_write_user_row(const PROGRAMMER *pgm, const AVRPART *p, uint32_t ad
return updi_nvm_write_user_row_V2(pgm, p, address, buffer, size);
case UPDI_NVM_MODE_V3:
return updi_nvm_write_user_row_V3(pgm, p, address, buffer, size);
case UPDI_NVM_MODE_V4:
return updi_nvm_write_user_row_V4(pgm, p, address, buffer, size);
case UPDI_NVM_MODE_V5:
return updi_nvm_write_user_row_V5(pgm, p, address, buffer, size);
default:
Expand All @@ -152,6 +165,8 @@ int updi_nvm_write_eeprom(const PROGRAMMER *pgm, const AVRPART *p, uint32_t addr
return updi_nvm_write_eeprom_V2(pgm, p, address, buffer, size);
case UPDI_NVM_MODE_V3:
return updi_nvm_write_eeprom_V3(pgm, p, address, buffer, size);
case UPDI_NVM_MODE_V4:
return updi_nvm_write_eeprom_V4(pgm, p, address, buffer, size);
case UPDI_NVM_MODE_V5:
return updi_nvm_write_eeprom_V5(pgm, p, address, buffer, size);
default:
Expand All @@ -169,6 +184,8 @@ int updi_nvm_write_fuse(const PROGRAMMER *pgm, const AVRPART *p, uint32_t addres
return updi_nvm_write_fuse_V2(pgm, p, address, value);
case UPDI_NVM_MODE_V3:
return updi_nvm_write_fuse_V3(pgm, p, address, value);
case UPDI_NVM_MODE_V4:
return updi_nvm_write_fuse_V4(pgm, p, address, value);
case UPDI_NVM_MODE_V5:
return updi_nvm_write_fuse_V5(pgm, p, address, value);
default:
Expand All @@ -186,6 +203,8 @@ int updi_nvm_wait_ready(const PROGRAMMER *pgm, const AVRPART *p) {
return updi_nvm_wait_ready_V2(pgm, p);
case UPDI_NVM_MODE_V3:
return updi_nvm_wait_ready_V3(pgm, p);
case UPDI_NVM_MODE_V4:
return updi_nvm_wait_ready_V4(pgm, p);
case UPDI_NVM_MODE_V5:
return updi_nvm_wait_ready_V5(pgm, p);
default:
Expand All @@ -203,6 +222,8 @@ int updi_nvm_command(const PROGRAMMER *pgm, const AVRPART *p, uint8_t command) {
return updi_nvm_command_V2(pgm, p, command);
case UPDI_NVM_MODE_V3:
return updi_nvm_command_V3(pgm, p, command);
case UPDI_NVM_MODE_V4:
return updi_nvm_command_V4(pgm, p, command);
case UPDI_NVM_MODE_V5:
return updi_nvm_command_V5(pgm, p, command);
default:
Expand Down
Loading

0 comments on commit 1b0b263

Please sign in to comment.