From 0670b71ee740656a63c626d7655d7d5ecb10d699 Mon Sep 17 00:00:00 2001 From: sh-sergey <26677086+sh-sergey@users.noreply.github.com> Date: Tue, 1 Apr 2025 12:33:57 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D1=80=D0=B0=D0=B9=D0=B2=D0=B5=D1=80=20EE?= =?UTF-8?q?PROM:=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D0=B2=D0=B5=D0=B6=D0=B5=D0=BC=20sdk,=20=D1=87=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D1=87=D0=BD=D0=BE=D0=B5=20=D1=81=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.pio/build/mik32v2/firmware.hex | 228 +++++++++--------- upload-drivers/jtag-eeprom/platformio.ini | 2 + upload-drivers/jtag-eeprom/ram.ld | 19 -- upload-drivers/jtag-eeprom/sections.lds | 105 -------- upload-drivers/jtag-eeprom/src/main.c | 40 ++- 5 files changed, 154 insertions(+), 240 deletions(-) delete mode 100644 upload-drivers/jtag-eeprom/ram.ld delete mode 100644 upload-drivers/jtag-eeprom/sections.lds diff --git a/upload-drivers/jtag-eeprom/.pio/build/mik32v2/firmware.hex b/upload-drivers/jtag-eeprom/.pio/build/mik32v2/firmware.hex index 868688e..21901d1 100644 --- a/upload-drivers/jtag-eeprom/.pio/build/mik32v2/firmware.hex +++ b/upload-drivers/jtag-eeprom/.pio/build/mik32v2/firmware.hex @@ -1,114 +1,120 @@ :020000040200F8 -:10000000FD62938202400100FD12E39E02FE374131 -:10001000000213010100B70100029381016FB705CF -:1000200000029385056F370600021306066FB706B8 -:1000300000029386066F39A083A2050023A0560014 -:1000400091059106E3EAC5FEB70500029385056FA9 -:10005000370600021306066FB70600029386066F86 -:1000600039A083A2050023A0560091059106E3EA7A -:10007000C5FEB70500029385056F3706000213061B -:10008000066F21A023A005009105E3EDC5FEB70092 -:100090000002E780C00AB7000002E780C00AB7008C -:1000A0000002E780E02273005010F5BF828000005C -:1000B0000000000000000000000000000000000040 -:1000C0006F004000197106C20AC40EC612C816CAD3 -:1000D0001ACC1ECE22D026D22AD42ED632D836DA48 -:1000E0003ADC3EDEC2C0C6C2CAC4CEC6D2C8D6CA78 -:1000F000DACCDECEE2D0E6D2EAD4EED6F2D8F6DA28 -:10010000FADCFEDE970000009380E00482909240CB -:100110002241B2414242D2426243F24302549254DB -:100120002255B2554256D2566257F2570648964863 -:100130002649B649464AD64A664BF64B065C965C5B -:10014000265DB65D465ED65E665FF65F096173004A -:10015000203001A03D432A876373C3029377F700E1 -:10016000BDEFADE5937606FF3D8ABA960CC34CC34E -:100170000CC74CC74107E36BD7FE11E28280B30680 -:10018000C3408A069702000096966780A600230760 -:10019000B700A306B7002306B700A305B7002305E1 -:1001A000B700A304B7002304B700A303B7002303D9 -:1001B000B700A302B7002302B700A301B7002301D1 -:1001C000B700A300B7002300B700828093F5F50FB6 -:1001D00093968500D58D93960501D58D61B793963D -:1001E00027009702000096968682E78086FA96801E -:1001F000C1171D8F3E96E374C3F8A5B75D71130652 -:1002000080028145280886C6B137BD47230CF1001E -:100210008947230EF1003ED2E177938707082C0827 -:100220000A85231AF102C526B640616182803171C8 -:100230004AD94ED706DF22DD26DB52D556D35AD116 -:1002400037490002653F9307098083A90700854766 -:1002500013F7F90F6317F70A614681452800DD3D62 -:10026000B707070093D9890061679387074093F91F -:10027000F9031307076A8D461306000281454800FB -:10028000B7240002616A3EC2130909809E09592001 -:10029000938404800144130A0A6A130B0008634420 -:1002A00034018147A9A8931A040193DA0A01D2877D -:1002B0000147930600022686D68548006D2813065E -:1002C0000008814508107935528793060002101006 -:1002D000D68548000D2201471C10BA9783C6070037 -:1002E000B307970083C70700638ED7009357744006 -:1002F000A207E206D58F4207D98F93E72700232074 -:10030000F90001A00507E31967FD130404089384AD -:10031000040871B71C418E0603A88700B3E60601E6 -:1003200093E6060894C7144999CA814663DDC6005E -:10033000CCC323A007003A850DE50D458280CCC3D0 -:10034000814663CCC600944793E6360094C775D7C0 -:10035000C8477D17058965FD828023A007008506B3 -:10036000CDB703A8C7007D1513781800E31608FC65 -:100370008506910565BF032805000E0783288800C0 -:1003800033671701136707082324E800184905C3DA -:1003900001476353D702131527002322B800329573 -:1003A00008412320A8003E850DED0D4582802322C3 -:1003B000B8000147634FD700032788001367570031 -:1003C0002324E800FDD30325C800FD1705897DF926 -:1003D000828093152700B2958C4105072320B80031 -:1003E000D1BF8328C8007D1593F81800E39E08FA52 -:1003F0000507910579BF1C4989CF814763FFD70065 -:1004000003280500BA882322B800639108020D452D -:10041000828008414CC163E4D700014582800C41D1 -:100420001397270032970CC38507F5B70323C8003D -:10043000FD1813731300E31A03FC832808001398B4 -:1004400027003298232018018507910545BF0547ED -:10045000AA876305E50209476300E506054591EBB8 -:10046000B7060600DC4A7D771307F73FF98FDCCA31 -:10047000014582807D1719EB0D458280930600406F -:1004800037A7070013070712B7050500905D7D8E9B -:1004900075D2370606005C4A7D771307F73FF98F60 -:1004A000D58F41115CCA02C613073006B2476359A3 -:1004B000F700014541018280856693860680C9B7B1 -:1004C000B24785073EC6DDB791476307F50263EA89 -:1004D000A7008547630AF50489476309F5040545C4 -:1004E0008280A147E31DF5FE0947094501A8FD17D4 -:1004F00081EFC8D20D45828005470D45B7A707009B -:1005000093870712B7060500905E798E6DD28A0533 -:10051000C98D4111CCD202C613073006B247635AC7 -:10052000F7000145410182801147C9BF21470145BC -:10053000F1B7B24785073EC6D5B70547AA87630519 -:10054000E50209476304E506054591EBB706060099 -:100550009C4A7D771307F73FF98F9CCA014582803B -:100560007D1719EB0D4582809306004037A70700E1 -:1005700013070712B7050500905D7D8E75D237070A -:1005800006001C4B7D761306F63FF18FD58F1CCBF2 -:10059000232C070085471CCF411102C613073006E4 -:1005A000B2476359F7000145410182808566938611 -:1005B00006806DBFB24785073EC6DDB711C98547C6 -:1005C000630DF50205458280FD1791EB0D45828094 -:1005D0000946B7A7070093870712B7060500985E7C -:1005E000718F7DD34111C8D602C613073006B247BA -:1005F0006357F7000145410182800546D9BFB247E4 -:1006000085073EC6EDB7011126CAB7040600DC48CF -:1006100006CE22CC4AC84EC652C456C2F19BDCC894 -:100620009C482A89C845F19B9CC8D84883C7C50106 -:100630002E84137737C08A07D98FDCC883C7D501CA -:1006400098489A071377F7C393F7073CD98F9CC84C -:10065000FD3B0C44AA8A03454400BD351848B70742 -:1006600005002A8A98C358480850D8C3184C98C720 -:10067000E935AA8948509937834704002A8793F6B9 -:10068000170089E6D44893E62600D4C893F62700DD -:1006900099E637060600544A93E6160054CA93F6C4 -:1006A000470099E637060600144A93E6260014CA66 -:1006B000A18B99E7B70606009C4A93E717009CCAEE -:1006C000F2406244232059012322490123243901A5 -:1006D0002326E900D244B249224A924A4A85424935 -:1006E00005618280000000000000000000000000A2 +:10000000FD6293820240FD12E39F02FE374100022F +:1000100013010100B7110002938181F1B7050002BD +:10002000938585733706000213060674B70600022F +:100030009386867339A083A2050023A056009105FC +:100040009106E3EAC5FEB70500029385850B3706E6 +:10005000000213068615B70600029386860B39A0A8 +:1000600083A2050023A0560091059106E3EAC5FE90 +:10007000B70500029385057437060002130606745F +:1000800021A023A005009105E3EDC5FEB702000203 +:100090009382020C73905230B7000002E780600B2D +:1000A000B7000002E780600BB7000002E780202362 +:0800B00073005010F5BF8280BF +:1000B80000000000000000006F004000130141F83C +:1000C80006C00AC20EC412C616C81ACA1ECC22CE50 +:1000D80026D02AD22ED432D636D83ADA3EDC42DEC0 +:1000E800C6C0CAC2CEC4D2C6D6C8DACADECCE2CE30 +:1000F800E6D0EAD2EED4F2D6F6D8FADAFEDC9700E9 +:10010800000093800005829082401241A241324251 +:10011800C2425243E243724482541255A2553256A7 +:10012800C2565257E257725886481649A649364A67 +:10013800C64A564BE64B764C865C165DA65D365E27 +:10014800C65E565FE65F1301C1077300203001A049 +:100158003D432A876373C3029377F700BDEFADE58C +:10016800937606FF3D8ABA960CC34CC30CC74CC79E +:100178004107E36BD7FE11E28280B306C3408A06CB +:100188009702000096966780A6002307B700A3068B +:10019800B7002306B700A305B7002305B700A304DB +:1001A800B7002304B700A303B7002303B700A302D3 +:1001B800B7002302B700A301B7002301B700A300CB +:1001C800B7002300B700828093F5F50F939685005A +:1001D800D58D93960501D58D61B793962700970223 +:1001E800000096968682E78086FA9680C1171D8F52 +:1001F8003E96E374C3F8A5B75D7113068002814586 +:10020800280886C6B137BD47230CF1008947230E5D +:10021800F1003ED2E177938707082C080A85231A54 +:10022800F1020529B6406161828031714ED722DD25 +:1002380006DF26DB4AD952D556D35AD1753F03A4D7 +:10024800018205471C4093F7F707639EE70C614658 +:1002580081452800F53DB7070700938707403EC250 +:100268001C40014493D4870093F4F40393F70708E0 +:100278009E0485CF61691309096A636C94006169FA +:1002880001441309096A130B0008634A9402814761 +:1002980041A8931504014A87814613060002C181CB +:1002A8004800492813040408C9BF61671307076A8F +:1002B8008D461306000281454800AD28C9B703A63C +:1002C8004182131A0401135A0A01CA870147930687 +:1002D80000022296D2854800F920130600088145BD +:1002E8000810BD354A87930600021010D2854800D1 +:1002F800992283A741820147A2971410BA963386A0 +:10030800E70083C6060003460600630FD60093572E +:100318007440A207E206D58F4207D98F93E72700DA +:1003280003A701821CC301A00507E31867FD130496 +:100338000408A1BF1C418E0603A88700B3E6060186 +:1003480093E6060894C7144999CA814663DDC60036 +:10035800CCC323A007003A8515E10D458280CCC3A4 +:10036800814663C9C600944793E6360094C70DE3F7 +:100378000D451DA023A007008506E5B703A8C70003 +:100388007D1513781800E31908FC850691057DBFD3 +:10039800C8477D17058961FDB707000103A007005D +:1003A80003A047008280032805000E0783288800E1 +:1003B80033671701136707082324E800184905C3A2 +:1003C80001476353D702131527002322B80032953B +:1003D80008412320A8003E850DE90D45828023228F +:1003E800B8000147634BD7000327880013675700FD +:1003F8002324E8008DE70D4505A893152700B2953D +:100408008C4105072320B800F1BF8328C8007D155B +:1004180093F81800E39208FC050791055DB70325DA +:10042800C800FD17058979F5B707000103A0070083 +:1004380003A0470082801C4989CF814763FFD7000A +:1004480003280500BA882322B800639708020D45DF +:10045800828008414CC163EAD700B707000103A0B6 +:10046800070003A04700014582800C41139727002D +:1004780032970CC38507C5B70323C800FD1813734B +:100488001300E31403FC832808001398270032980C +:10049800232018018507910555B70547AA876305E5 +:1004A800E50209476300E506054591EBB706060036 +:1004B800DC4A7D771307F73FF98FDCCA0145828054 +:1004C8007D1719EB0D4582809306004037A707007A +:1004D80013070712B7050500905D7D8E75D23706A4 +:1004E80006005C4A7D771307F73FF98FD58F4111D6 +:1004F8005CCA02C613073006B2476359F7000145C4 +:1005080041018280856693860680C9B7B247850710 +:100518003EC6DDB791476307F50263EAA700854742 +:10052800630AF50489476309F50405458280A147F4 +:10053800E31DF5FE0947094501A8FD1781EFC8D25B +:100548000D45828005470D45B7A707009387071219 +:10055800B7060500905E798E6DD28A05C98D411166 +:10056800CCD202C613073006B247635AF7000145DA +:10057800410182801147C9BF21470145F1B7B24700 +:1005880085073EC6D5B70547AA876305E50209472B +:100598006304E506054591EBB70606009C4A7D779E +:1005A8001307F73FF98F9CCA014582807D1719EB25 +:1005B8000D4582809306004037A7070013070712EE +:1005C800B7050500905D7D8E75D2370706001C4B78 +:1005D8007D761306F63FF18FD58F1CCB232C0700B1 +:1005E80085471CCF411102C613073006B24763592D +:1005F800F7000145410182808566938606806DBFBC +:10060800B24785073EC6DDB711C98547630DF502B8 +:1006180005458280FD1791EB0D4582800946B7A7F5 +:10062800070093870712B7060500985E718F7DD380 +:100638004111C8D602C613073006B2476357F70000 +:100648000145410182800546D9BFB24785073EC6AC +:10065800EDB7011126CAB7040600DC4806CE22CC45 +:100668004AC84EC652C456C2F19BDCC89C482A8967 +:10067800C845F19B9CC8D84883C7C5012E84137709 +:1006880037C08A07D98FDCC883C7D50198489A072D +:100698001377F7C393F7073CD98F9CC8FD3B0C44ED +:1006A800AA8A03454400BD351848B70705002A8AB9 +:1006B80098C358480850D8C3184C98C7E935AA8930 +:1006C80048509937834704002A8793F6170089E62C +:1006D800D44893E62600D4C893F6270099E637064F +:1006E8000600544A93E6160054CA93F6470099E662 +:1006F80037060600144A93E6260014CAA18B99E728 +:10070800B70606009C4A93E717009CCAF240624469 +:100718002320590123224901232439012326E900F2 +:10072800D244B249224A924A4A85424905618280A6 +:08073800003800020018000265 :0400000502000000F5 :00000001FF diff --git a/upload-drivers/jtag-eeprom/platformio.ini b/upload-drivers/jtag-eeprom/platformio.ini index fab74dc..05c0054 100644 --- a/upload-drivers/jtag-eeprom/platformio.ini +++ b/upload-drivers/jtag-eeprom/platformio.ini @@ -13,3 +13,5 @@ platform = MIK32 board = mik32v2 framework = framework-mik32v2-sdk board_build.ldscript = ram +board_upload.maximum_size = 4096 +board_upload.maximum_ram_size = 2048 diff --git a/upload-drivers/jtag-eeprom/ram.ld b/upload-drivers/jtag-eeprom/ram.ld deleted file mode 100644 index a20b85d..0000000 --- a/upload-drivers/jtag-eeprom/ram.ld +++ /dev/null @@ -1,19 +0,0 @@ - -OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv", "elf32-littleriscv") -OUTPUT_ARCH(riscv) - -ENTRY(_start) - - -MEMORY { - ram (RWX): ORIGIN = 0x02000000, LENGTH = 16K -} - -STACK_SIZE = 512; - -CL_SIZE = 16; - -REGION_ALIAS("REGION_TEXT", ram); -REGION_ALIAS("REGION_RAM", ram); - -INCLUDE sections.lds diff --git a/upload-drivers/jtag-eeprom/sections.lds b/upload-drivers/jtag-eeprom/sections.lds deleted file mode 100644 index 7b1d14f..0000000 --- a/upload-drivers/jtag-eeprom/sections.lds +++ /dev/null @@ -1,105 +0,0 @@ - -SECTIONS { - .text ORIGIN(REGION_TEXT) : { - PROVIDE(__TEXT_START__ = .); - *crt0.o(.text .text.*) - *(.text.smallsysteminit) - *(.text.SmallSystemInit) - . = ORIGIN(REGION_TEXT) + 0xC0; - KEEP(*crt0.o(.trap_text)) - - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - . = ALIGN(CL_SIZE); - PROVIDE(__TEXT_END__ = .); - } >REGION_TEXT - - .data : - AT( __TEXT_END__ ) { - PROVIDE(__DATA_START__ = .); - _gp = .; - *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata*) - *(.sdata .sdata.* .gnu.linkonce.s.*) - *(.data .data.*) - . = ALIGN(CL_SIZE); - PROVIDE(__DATA_END__ = .); - } >REGION_RAM - - __DATA_IMAGE_START__ = LOADADDR(.data); - __DATA_IMAGE_END__ = LOADADDR(.data) + SIZEOF(.data); - - /* thread-local data segment */ - .tdata : { - PROVIDE(_tls_data = .); - PROVIDE(_tdata_begin = .); - *(.tdata .tdata.*) - PROVIDE(_tdata_end = .); - . = ALIGN(CL_SIZE); - } >REGION_RAM - - .tbss : { - PROVIDE(__BSS_START__ = .); - *(.tbss .tbss.*) - . = ALIGN(CL_SIZE); - PROVIDE(_tbss_end = .); - } >REGION_RAM - - /* bss segment */ - .sbss : { - *(.sbss .sbss.* .gnu.linkonce.sb.*) - *(.scommon) - } >REGION_RAM - - .bss : { - *(.bss .bss.*) - *(COMMON) - . = ALIGN(CL_SIZE); - PROVIDE(__BSS_END__ = .); - } >REGION_RAM - - /* Code intended to be copied to REGION_RAM before execution */ - .ram_text : - AT( ALIGN(__DATA_IMAGE_END__, CL_SIZE) ) { - PROVIDE(__RAM_TEXT_START__ = .); - *(.ram_text) - . = ALIGN(CL_SIZE); - PROVIDE(__RAM_TEXT_END__ = .); - } > REGION_RAM - - __RAM_TEXT_IMAGE_START__ = LOADADDR(.ram_text); - __RAM_TEXT_IMAGE_END__ = LOADADDR(.ram_text) + SIZEOF(.ram_text); - ASSERT(__RAM_TEXT_IMAGE_END__ < ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT), "REGION_TEXT segment overflows") - - ASSERT(__RAM_TEXT_END__ < ORIGIN(REGION_RAM) + LENGTH(REGION_RAM) - STACK_SIZE, "REGION_RAM section overflows") - - _end = .; - PROVIDE(__end = .); - - BUFFER_SIZE = 8K; - - .buffer ORIGIN(REGION_RAM) + 6K : { - FILL(0); - PROVIDE(__BUFFER__END__ = .); - PROVIDE(BUFFER = .); - . += BUFFER_SIZE; - PROVIDE(BUFFER_STATUS = .); - . += 4; - PROVIDE(__BUFFER__END__ = .); - } >REGION_RAM - - /* End of uninitalized data segement */ - - .stack ORIGIN(REGION_RAM) + LENGTH(REGION_RAM) - STACK_SIZE : { - FILL(0); - PROVIDE(__STACK_START__ = .); - . += STACK_SIZE; - PROVIDE(__C_STACK_TOP__ = .); - PROVIDE(__STACK_END__ = .); - } >REGION_RAM - - /DISCARD/ : { - *(.eh_frame .eh_frame.*) - } -} \ No newline at end of file diff --git a/upload-drivers/jtag-eeprom/src/main.c b/upload-drivers/jtag-eeprom/src/main.c index 81f1871..ee94208 100644 --- a/upload-drivers/jtag-eeprom/src/main.c +++ b/upload-drivers/jtag-eeprom/src/main.c @@ -11,13 +11,18 @@ */ #define STATUS_CODE_S 0 -#define STATUS_CODE_M 0xFF +#define STATUS_CODE_M 0x7F #define STATUS_CODE(X) ((X) << STATUS_CODE_S) #define STATUS_CODE_OK 0 #define STATUS_CODE_START 1 #define STATUS_CODE_MISMATCH 2 +#define STATUS_CODE_ERASE_S 7 +#define STATUS_CODE_ERASE_M (1 << STATUS_CODE_ERASE_S) +#define STATUS_CODE_ERASE_FULL 0 +#define STATUS_CODE_ERASE_USED STATUS_CODE_ERASE_M + #define STATUS_CODE_START_PAGE_COUNT_S 8 #define STATUS_CODE_START_PAGE_COUNT_M ((64 - 1) << STATUS_CODE_START_PAGE_COUNT_S) @@ -30,8 +35,8 @@ #define STATUS_CODE_MISMATCH_VALUE(X) ((X) << STATUS_CODE_MISMATCH_VALUE_S) const int BUFFER_SIZE = 8 * 1024; -extern uint8_t *BUFFER[]; -extern uint32_t BUFFER_STATUS[]; +uint8_t *BUFFER = (uint8_t *)0x02001800; +uint32_t *BUFFER_STATUS = (uint32_t *)0x02003800; #define EEPROM_OP_TIMEOUT 100000 #define USART_TIMEOUT 1000 @@ -69,7 +74,27 @@ int main() STATUS_CODE_START_PAGE_COUNT_S) * EEPROM_PAGE_WORDS * 4; - HAL_EEPROM_Erase(&heeprom, 0, EEPROM_PAGE_WORDS, HAL_EEPROM_WRITE_ALL, EEPROM_OP_TIMEOUT); + if (*BUFFER_STATUS & STATUS_CODE_ERASE_USED) + { + for (uint32_t addr = 0; addr < max_address; addr += (EEPROM_PAGE_WORDS * 4)) + { + HAL_EEPROM_Erase( + &heeprom, + addr, + EEPROM_PAGE_WORDS, + HAL_EEPROM_WRITE_SINGLE, + EEPROM_OP_TIMEOUT); + } + } + else + { + HAL_EEPROM_Erase( + &heeprom, + 0, + EEPROM_PAGE_WORDS, + HAL_EEPROM_WRITE_ALL, + EEPROM_OP_TIMEOUT); + } for (int addr = 0; addr < max_address; addr += (EEPROM_PAGE_WORDS * 4)) { @@ -87,7 +112,12 @@ int main() uint8_t rb[EEPROM_PAGE_WORDS * 4] = {0}; - HAL_EEPROM_Read(&heeprom, addr, (uint32_t *)rb, EEPROM_PAGE_WORDS, EEPROM_OP_TIMEOUT); + HAL_EEPROM_Read( + &heeprom, + addr, + (uint32_t *)rb, + EEPROM_PAGE_WORDS, + EEPROM_OP_TIMEOUT); for (uint32_t b = 0; b < (EEPROM_PAGE_WORDS * 4); b++) {