diff --git a/.gitignore b/.gitignore index d224ae8..750214f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ openocd *.code-workspace dist mik32_upload.spec +/build /upload_drivers/jtag_spifi/.pio/build/mik32v2/hal_core /upload_drivers/jtag_spifi/.pio/build/mik32v2/hal_peripherals /upload_drivers/jtag_spifi/.pio/build/mik32v2/hal_utilities diff --git a/mik32_debug_hal/spifi.py b/mik32_debug_hal/spifi.py index dbc05cd..d1009b1 100644 --- a/mik32_debug_hal/spifi.py +++ b/mik32_debug_hal/spifi.py @@ -392,15 +392,8 @@ def write_pages(pages: Dict[int, List[int]], openocd: OpenOcdTclRpc, use_quad_sp return 0 -def wait_halted(openocd: OpenOcdTclRpc, timeout_seconds: float = 2) -> int: - start_time = time.perf_counter() - while ("halted" not in openocd.run("riscv.cpu curstate")): - if (time.perf_counter() - start_time) > timeout_seconds: - print("Wait halted TIMEOUT!") - openocd.halt() - return 1 - time.sleep(0.01) - return 0 +def wait_halted(openocd: OpenOcdTclRpc, timeout_seconds: float = 2): + openocd.run(f'wait_halt {int(timeout_seconds * 1000)}') def write_pages_by_sectors(pages: Dict[int, List[int]], openocd: OpenOcdTclRpc, use_quad_spi=False, use_chip_erase=False): @@ -429,36 +422,6 @@ def write_pages_by_sectors(pages: Dict[int, List[int]], openocd: OpenOcdTclRpc, openocd.run("wp 0x2003000 4 w") openocd.resume(0x2000000) wait_halted(openocd) - openocd.halt() - - # spifi erase - # - # for sector in sectors_list: - # print(f"Erase sector {sector}", flush=True) - # openocd.write_word(0x02002000, 0b0010 | (sector << 8)) - # openocd.resume() - # if wait_halted(openocd) != 0: - # return 1 - # print( - # f"Erase sector {sector} result {openocd.read_word(0x02002008)}", flush=True) - - # spifi erase check - # - # for sector in sectors_list: - # # print(f"Erase sector {sector}", flush=True) - # # openocd.write_word(0x02002000, 0b0010 | sector) - # # openocd.resume() - # # if wait_halted(openocd) != 0: - # # return 1 - # # print(f"Erase sector {sector} result {openocd.read_word(0x02002008)}", flush=True) - - # page_bytes = [0xff] * 256 - - # result = spifi_read_data(openocd, sector, 256, page_bytes) - - # if result == 1: - # print("Data error") - # return result for sector in sectors_list: print(f"Program sector {sector}", flush=True) @@ -470,53 +433,17 @@ def write_pages_by_sectors(pages: Dict[int, List[int]], openocd: OpenOcdTclRpc, else: bytes_list.extend([0]*256) - # extend_value = 1 + sector - # bytes_list.extend([(extend_value >> 0) & 0xFF, (extend_value >> 8) - # & 0xFF, (extend_value >> 16) & 0xFF, (extend_value >> 24) & 0xFF]) - # print(bytes_list) - openocd.write_memory(0x02002000, 8, bytes_list) openocd.run(f"set_reg {{t6 {sector}}}") openocd.resume() - wait_halted(openocd, 60) - # openocd.halt() + wait_halted(openocd, 10) print(f"Check page result {openocd.read_memory(0x2003000, 32, 1)}") print(f"{datetime.datetime.now().time()} Program sector {sector} complete", flush=True) - - - # result = generic_flash.read_data(openocd, sector, 4096, bytes_list) - - # for page in range(16): - # page_bytes = pages.get(page * 256 + sector) - # if page_bytes is not None: - # result = generic_flash.read_data( - # openocd, page * 256 + sector, 256, page_bytes, dma=dma_instance) - - # if result == 1: - # print("Data error") - # return result - - init_memory(openocd) - # check write - # - # pages_offsets = list(pages) - # for index, page_offset in enumerate(pages_offsets): - # page_bytes = pages[page_offset] - - # memory_bytes = openocd.read_memory(page_offset + 0x80000000, 8, 256) - # print(page_offset, memory_bytes) - - # for i, byte in enumerate(memory_bytes): - # if byte != page_bytes[i]: - # print("Data error!") - # openocd.run("rbp 0x02002010") - # return result - if result == 0: # Прошивка страниц флеш памяти по SPIFI была завершена print("Flashing of flash memory pages via SPIFI has been completed", flush=True) diff --git a/upload_drivers/jtag_spifi/.pio/build/mik32v2/firmware.hex b/upload_drivers/jtag_spifi/.pio/build/mik32v2/firmware.hex index 7722f31..ebab4c5 100644 --- a/upload_drivers/jtag_spifi/.pio/build/mik32v2/firmware.hex +++ b/upload_drivers/jtag_spifi/.pio/build/mik32v2/firmware.hex @@ -1,13 +1,13 @@ :020000040200F8 :10000000FD62938202400100FD12E39E02FE374131 -:10001000000213010100B7110002938101F5B71529 -:100020000002938505F537160002130606F5B7168C -:100030000002938606F539A083A2050023A056008E -:1000400091059106E3EAC5FEB7150002938505F513 -:1000500037160002130606F5B7160002938606F55A +:10001000000213010100B7110002938101D8B71546 +:100020000002938505D837160002130606D8B716C6 +:100030000002938606D839A083A2050023A05600AB +:1000400091059106E3EAC5FEB7150002938505D830 +:1000500037160002130606D8B7160002938606D894 :1000600039A083A2050023A0560091059106E3EA7A -:10007000C5FEB7150002938505F537160002130675 -:1000800006F521A023A005009105E3EDC5FEB7000C +:10007000C5FEB7150002938505D837160002130692 +:1000800006D821A023A005009105E3EDC5FEB70029 :100090000002E780C00AB7000002E780C00AB7008C :1000A0000002E780002373005010F5BF828000003B :1000B0000000000000000000000000000000000040 @@ -34,67 +34,67 @@ :1002000080028145280886C6B137BD47230CF1001E :100210008947230EF1003ED2E177938707082C0827 :100220000A85231AF102EF00A07BB640616182804B -:10023000757106C726C34AC1CEDED2DCD6DADAD85B -:10024000DED622C5E2D4E6D2EAD04D3F371508000B -:100250000147814621469305F01113050540BD2253 -:1002600037150002130545E8452113064002814574 -:100270006818CD35B707070028183EDCEF00F002FC -:1002800037150002130545E941212818EF005015E4 -:1002900037150002130585EA85293729000237152D -:1002A0000002B734000293050900130505ECA929E3 -:1002B000371A000223A00400856993840400B71A4A -:1002C0000002371B0002B71B00022818EF00501174 -:1002D000E256E1679387176AFD1781C7D84E418BB5 -:1002E00065FFFE8513054AED0521FE852818EF0000 -:1002F00030190144130C0900B3068C00B3858F003C -:1003000013060010281813040410EF00B012E313B2 -:1003100034FF514693850AE74800EF00B01AE257D0 -:1003200051464C0048103ECC02CE02D0EF0090194E -:100330002808EF00C07B0144014DB70C0080B38555 -:100340009F01A29503260C009441630DD6001385EE -:10035000CBEE5D2E0D4D1104410CE31234FF23A0B2 -:10036000A401A5B7B28613058BF1792EEDB7011163 -:10037000B717080006CE02C402C69387074063126F -:10038000F502B70705000947D8CF930700063EC01E -:1003900085473EC28A85374508007126F2400561CF -:1003A0008280B727080093870780E319F5FEB70717 -:1003B00005001147D8CF930700303EC037450800ED -:1003C00085473EC28A8513050540C1BF011122CC75 -:1003D00026CA4AC84EC652C42A8406CE2E89B28482 -:1003E000368ABA896937BD47014563FE2703232052 -:1003F000040023262401FD575CCC2322440193E70B -:1004000014002324340113F744001CC0A1885C4C61 -:10041000054501C713D56701058991CC6DD9939620 -:10042000A700E3D606FEF2406244D2444249B249F4 -:10043000224A0561828061DDFDB7484D1981058939 -:100440008280411122C406C62A842285FD3775DDCB -:10045000B2402244410182809317050137150800FC -:10046000C183130505401CD5E9BF411122C406C64E -:100470002A840305040009E5B24022444101828038 -:100480000504D93FFDB75971D6CADAC8DEC6E2C441 -:10049000E6C2EAC086D6A2D4A6D2CAD0CECED2CCEC -:1004A0006EDEAA872E8D930A0003130BA002930B16 -:1004B000C004130C0002A94C038507006307052242 -:1004C00013075002138917006311E508038517000D -:1004D0006310550903852700138937008544631687 -:1004E000650B03240D0093074D006355040033048E -:1004F00080408944030509003E8D05099377F5FD89 -:10050000639777010305090093E444000509630E2E -:10051000051C13070006AA876356A700930705FE6C -:10052000E207E1871307F0046388E70C6342F706EC -:1005300013073004638CE70A130740046381E70E56 -:10054000130720048946638AE70A3937EA8951A0EC -:100550001307D0026306E50013892700814441B7E1 -:100560000385270013893700894495BF330494031A -:1005700005092A940305F9FF130404FD930705FDFB -:1005800093F7F70FE374F7FE95BF01442547FDB7D6 -:10059000130750056385E708130780056383E708A1 -:1005A00013073005E393E7FA832D0D0093094D00FF -:1005B00013FA24006E85EF0050052A8D93041D0068 -:1005C00063150A00636A8D00268D6E85793D636A26 -:1005D0008D004E8DCA87CDB513050002B53D268D21 -:1005E000F1BF130500028D3D050DD5B703050D00C4 -:1005F00093094D009535F1BFA14613F744009309C7 +:100230000D71232E1114232A9114232441152322F6 +:10024000511523206115232E7113232C8113232C88 +:1002500081142328211523263115232A91132328BD +:10026000A113693F371508000147814621469305D0 +:10027000F01113050540A12A37150002130585CE9C +:1002800061211306400281456800E935B707070080 +:1002900028003EC4EF00700137150002130585CF1A +:1002A000A5212800EF00700E371500021305C5D0F8 +:1002B000A129B72A00023715000293850A00130509 +:1002C00045D2373A000289218144130A0A00371BBC +:1002D0000002371C0002856BFE8513058BD323209B +:1002E0009A00FE8C15212800EF00300AA246E16733 +:1002F0009387176AFD1781C7D84E418B65FFE68546 +:100300002800EF00901293890A00014981443304C8 +:100310009901CE86A285130600102800EF00300C4C +:1003200013060010814508183535A28514181306E8 +:1003300000102800EF00B0130144130D00101C182A +:10034000B3858900A29783C6050003C707006387AA +:10035000E600228613050CD5452E8D440504E310D6 +:10036000A4FF1309091093890910E31279FBADB7B3 +:100370000111B717080006CE02C402C693870740D2 +:100380006312F502B70705000947D8CF93070006A7 +:100390003EC085473EC28A85374508006926F2403F +:1003A00005618280B727080093870780E319F5FE6F +:1003B000B70705001147D8CF930700303EC0374537 +:1003C000080085473EC28A8513050540C1BF01115B +:1003D00022CC26CA4AC84EC652C42A8406CE2E89CA +:1003E000B284368ABA896937BD47014563FE27035F +:1003F0002320040023262401FD575CCC2322440142 +:1004000093E714002324340113F744001CC0A1888F +:100410005C4C054501C713D56701058991CC6DD9A1 +:100420009396A700E3D606FEF2406244D2444249C6 +:10043000B249224A0561828061DDFDB7484D1981CC +:1004400005898280411122C406C62A842285FD378F +:1004500075DDB240224441018280931705013715B2 +:100460000800C183130505401CD5E9BF411122C412 +:1004700006C62A840305040009E5B240224441016E +:1004800082800504D93FFDB75971D6CADAC8DEC6E5 +:10049000E2C4E6C2EAC086D6A2D4A6D2CAD0CECEE4 +:1004A000D2CC6EDEAA872E8D930A0003130BA00216 +:1004B000930BC004130C0002A94C038507006306CC +:1004C000052213075002138917006311E5080385FD +:1004D00017006310550903852700138937008544E9 +:1004E0006316650B03240D0093074D00635504004C +:1004F000330480408944030509003E8D0509937744 +:10050000F5FD639777010305090093E444000509AD +:10051000630D051C13070006AA876356A7009307FF +:1005200005FEE207E1871307F0046387E70C6342E7 +:10053000F70613073004638BE70A13074004638050 +:10054000E70E1307200489466389E70A3937EA89E9 +:1005500049A01307D0026306E500138927008144F0 +:1005600041B70385270013893700894495BF3304B9 +:10057000940305092A940305F9FF130404FD930766 +:1005800005FD93F7F70FE374F7FE95BF0144254788 +:10059000FDB7130750056384E708130780056382DE +:1005A000E70813073005E393E7FA832D0D0093095D +:1005B0004D0013FA24006E85F1252A8D93041D0049 +:1005C00063150A00636A8D00268D6E854535636A62 +:1005D0008D004E8DCA87D5B513050002BD3D268D11 +:1005E000F1BF13050002953D050DD5B703050D00BC +:1005F00093094D009D35F1BFA14613F744009309BF :100600004D0015C31306400403270D006396C7026F :10061000635407023307E04093E4040131A8A9467C :10062000E9BFC146D9BF130740046395E70003271C @@ -107,12 +107,12 @@ :100690001307D0022380EDFE938D270093F71400FB :1006A0001305000299C3130500036E8A8988130796 :1006B0001A0081E463648A023A8AFD1D3307BD0192 -:1006C00003050700513BE39A0DFEE3748AF013051E -:1006D00000025933050AD5BFEE879DBF3AC62AC42A -:1006E000A53B324722453A8AD9B7B650265496548C +:1006C00003050700593BE39A0DFEE3748AF0130516 +:1006D00000026133050AD5BFEE879DBF3AC62AC422 +:1006E000AD3B324722453A8AD9B7B6502654965484 :1006F0000659F649664AD64A464BB64B264C964CA6 :10070000064DF25D6561828039712ED24C1006CEA5 -:1007100032D436D63AD83EDA42DC46DE2EC6A5338F +:1007100032D436D63AD83EDA42DC46DE2EC6AD3387 :10072000F24021618280B7470800938707402A88FA :100730006303F508B7570800938707806303F50A3A :1007400037470800630CE50A05458280331E1F0108 @@ -173,76 +173,47 @@ :100AB00002C402C62147B707050037550800D8C74A :100AC00005448D478A85130505803EC022C2A139A1 :100AD000375508009307C0038A851305058022C295 -:100AE00022C43EC08931F2406244056182804111D6 -:100AF00022C406C62A84553F18405C4F93E707017D -:100B00005CCF1C441CCB5C4085CB1C43B70610005B -:100B1000D58F1CC3144C5C48B240D606CE07D58F87 -:100B200083460401C206D58F8346C4012244E206EF -:100B3000D58F1CCF410182801C43B706F0FFFD1604 -:100B4000F58FC1BF032305002A8E0325C30113655A -:100B50000502232EA3002324C300139626014982F5 -:100B60004D8E232603012322C300139605016354EF -:100B7000060299C20545B1CB01476346D700639C85 -:100B800008020D4582803386E7000346060005070C -:100B9000230AC300DDB799C2054505CB8147E3D0E1 -:100BA000D7FE03260E00034546013306F7008507EE -:100BB0002300A600EDB783270E00FD18DC4F93F746 -:100BC0000702D5DF11656D8D11E18280B70707003F -:100BD00083C7470113F585001D8D3335A000828042 -:100BE0001C414147D8CF8280E1689388086A014858 -:100BF0008147014781460146B7052006A1B701118B -:100C000006CEA307010089476393F502B705203597 -:100C1000E1681307F1009388086A01488147854617 -:100C200001460D37F2400345F10005618280B705AA -:100C30002005F9BF011106CE22CC26CA2E844AC84F -:100C4000AA84328936C64D37B247E1682286938836 -:100C5000086A01480147CA86B78580022685616413 -:100C6000D5351304146A7D1411C485452685413F8A -:100C7000058975F9F2406244D24442490561828097 -:100C8000011106CE22CC26CA2EC6AA84B13F324616 -:100C9000E1689388086A0148814701478146B705A2 -:100CA000802026856164793D1304146A7D1411C483 -:100CB00085452685A937058975F9F2406244D244F5 -:100CC00005618280B3C7A5008D8BB308C500B1E76D -:100CD0008D4763F4C704937735002A87B9EB13F681 -:100CE000C8FFB306E6409307000263C8D706AE8686 -:100CF000BA876371C70203A806009107910623AE65 -:100D000007FFE3EAC7FE9307F6FF998FF19B910770 -:100D10003E97BE956366170182802A87637E15031E -:100D200083C7050005078505A30FF7FEE39AE8FED4 -:100D3000828083C60500050793773700A30FD7FE8F -:100D40008505D1DF83C60500050793773700A30F1C -:100D5000D7FE8505F9FF61B78280411122C61304D1 -:100D6000000283A3050083A2450083AF850003AF83 -:100D7000C50083AE050103AE450103A3850103A8A9 -:100D8000C501945113074702B307E640232E77FCB1 -:100D9000232057FE2322F7FF2324E7FF2326D7FF34 -:100DA0002328C7FF232A67FE232C07FF232ED7FE05 -:100DB00093854502E347F4FAAE86BA876371C702AA -:100DC00003A806009107910623AE07FFE3EAC7FEDA -:100DD0009307F6FF998FF19B91073E97BE95636548 -:100DE000170132444101828083C70500050785054C -:100DF000A30FF7FEE387E8FE83C705000507850517 -:100E0000A30FF7FEE392E8FEE9BF937735002A8748 -:100E10009DEFB7867F7F9386F6F7FD551043110748 -:100E2000B377D600B697D18FD58FE389B7FE8346C7 -:100E3000C7FFB307A7408DCA8346D7FF9DC20345AE -:100E4000E7FF3335A0003E9579158280F9D28347BC -:100E50000700050793763700F5FB098F1305F7FFA9 -:100E600082801385D7FF82801385C7FF82800000B0 -:100E7000000000000000000000000000040000006E -:100E800003000000535441525420445249564552E5 -:100E90000A0000006D737020696E697420636F6DC5 -:100EA000706C6574650A000073706966692072650C -:100EB00073657420636F6D706C6574650A00000063 -:100EC000425546464552344B203D20307825303837 -:100ED000780A0000455241534520534543544F5230 -:100EE000203078253038780A000000006164647290 -:100EF0005B3078253038785D206275663A6D656DB7 -:100F0000203D2030782530387820213D203078254C -:100F10003038780A00000000616464725B30782524 -:100F20003038785D206275663A6D656D203D203001 -:100F30007825303878203D3D203078253038780AC3 -:100F400000000000000000000000000000000000A1 +:100AE00022C43EC08931F240624405618280032302 +:100AF00005002A8E0325C30113650502232EA300DA +:100B00002324C3001396260149824D8E2326030118 +:100B10002322C300139605016354060299C20545BA +:100B2000B1CB01476346D700639C08020D45828024 +:100B30003386E700034606000507230AC300DDB736 +:100B400099C2054505CB8147E3D0D7FE03260E00A9 +:100B5000034546013306F70085072300A600EDB7DD +:100B600083270E00FD18DC4F93F70702D5DF1165D0 +:100B70006D8D11E18280B707070083C7470113F528 +:100B800085001D8D3335A00082801C414147D8CFA0 +:100B90008280E1689388086A01488147014781465D +:100BA0000146B7052006A1B7011106CEA307010033 +:100BB00089476393F502B7052035E1681307F10013 +:100BC0009388086A01488147854601460D37F240FF +:100BD0000345F10005618280B7052005F9BF0111C9 +:100BE00006CE22CC26CA2E844AC8AA84328936C6AA +:100BF0004D37B247E16822869388086A0148014769 +:100C0000CA86B785800226856164D5351304146AC7 +:100C10007D1411C485452685413F058975F9F2404B +:100C20006244D244424905618280011106CE22CC41 +:100C300026CA2EC6AA84B13F3246E1689388086A64 +:100C40000148814701478146B705802026856164B8 +:100C5000793D1304146A7D1411C485452685A9378E +:100C6000058975F9F2406244D24405618280E168E9 +:100C700036879388086AB28601482E868147B70571 +:100C80008003B5B5937735002A879DEFB7867F7FC0 +:100C90009386F6F7FD5510431107B377D600B69744 +:100CA000D18FD58FE389B7FE8346C7FFB307A7402F +:100CB0008DCA8346D7FF9DC20345E7FF3335A000A9 +:100CC0003E9579158280F9D2834707000507937610 +:100CD0003700F5FB098F1305F7FF82801385D7FFD7 +:100CE00082801385C7FF828053544152542044525E +:100CF000495645520A0000006D737020696E697490 +:100D000020636F6D706C6574650A000073706966AE +:100D10006920726573657420636F6D706C657465AE +:100D20000A000000425546464552344B203D2030D3 +:100D300078253038780A0000455241534520534504 +:100D400043544F52203078253038780A0000000094 +:100D5000616464725B3078253038783A30782530B9 +:100D600032785D206275663A6D656D203D20307881 +:100D70002530327820213D203078253032780A0025 :0400000502000000F5 :00000001FF diff --git a/upload_drivers/jtag_spifi/.pio/build/mik32v2/idedata.json b/upload_drivers/jtag_spifi/.pio/build/mik32v2/idedata.json new file mode 100644 index 0000000..afbf75c --- /dev/null +++ b/upload_drivers/jtag_spifi/.pio/build/mik32v2/idedata.json @@ -0,0 +1 @@ +{"build_type": "release", "env_name": "mik32v2", "libsource_dirs": ["c:\\Users\\user\\.platformio\\packages\\tool-mik32-uploader\\upload_drivers\\jtag_spifi\\lib", "c:\\Users\\user\\.platformio\\packages\\tool-mik32-uploader\\upload_drivers\\jtag_spifi\\.pio\\libdeps\\mik32v2", "C:\\Users\\user\\.platformio\\lib"], "defines": ["OSC_SYSTEM_VALUE=32000000L", "PLATFORMIO=60115", "MIK32V2"], "includes": {"build": ["c:\\Users\\user\\.platformio\\packages\\tool-mik32-uploader\\upload_drivers\\jtag_spifi\\include", "c:\\Users\\user\\.platformio\\packages\\tool-mik32-uploader\\upload_drivers\\jtag_spifi\\src", "c:\\Users\\user\\.platformio\\packages\\tool-mik32-uploader\\upload_drivers\\jtag_spifi\\-v", "c:\\Users\\user\\.platformio\\packages\\tool-mik32-uploader\\upload_drivers\\jtag_spifi\\src", "C:\\Users\\user\\.platformio\\packages\\framework-mik32v2-sdk\\shared\\include", "C:\\Users\\user\\.platformio\\packages\\framework-mik32v2-sdk\\shared\\periphery", "C:\\Users\\user\\.platformio\\packages\\framework-mik32v2-sdk\\shared\\runtime", "C:\\Users\\user\\.platformio\\packages\\framework-mik32v2-sdk\\shared\\libs", "C:\\Users\\user\\.platformio\\packages\\framework-mik32v2-sdk\\hal\\core\\Include", "C:\\Users\\user\\.platformio\\packages\\framework-mik32v2-sdk\\hal\\peripherals\\Include", "C:\\Users\\user\\.platformio\\packages\\framework-mik32v2-sdk\\hal\\utilities\\Include"], "compatlib": [], "toolchain": ["C:\\Users\\user\\.platformio\\packages\\toolchain-riscv\\riscv-none-elf\\include\\c++\\13.2.0", "C:\\Users\\user\\.platformio\\packages\\toolchain-riscv\\riscv-none-elf\\include\\c++\\13.2.0\\riscv-none-elf", "C:\\Users\\user\\.platformio\\packages\\toolchain-riscv\\lib\\gcc\\riscv-none-elf\\13.2.0\\include", "C:\\Users\\user\\.platformio\\packages\\toolchain-riscv\\lib\\gcc\\riscv-none-elf\\13.2.0\\include-fixed", "C:\\Users\\user\\.platformio\\packages\\toolchain-riscv\\riscv-none-elf\\include"]}, "cc_flags": ["-std=gnu11", "-march=rv32imc_zicsr_zifencei", "-mabi=ilp32", "-mcmodel=medlow", "-Os", "-g3", "-Wall", "-fsigned-char", "-ffunction-sections", "-ffixed-x31"], "cxx_flags": ["-std=gnu++17", "-fabi-version=0", "-fno-exceptions", "-fno-rtti", "-fno-use-cxa-atexit", "-fno-threadsafe-statics", "-march=rv32imc_zicsr_zifencei", "-mabi=ilp32", "-mcmodel=medlow", "-Os", "-g3", "-Wall", "-fsigned-char", "-ffunction-sections", "-ffixed-x31"], "cc_path": "C:\\Users\\user\\.platformio\\packages\\toolchain-riscv\\bin\\riscv-none-elf-gcc.exe", "cxx_path": "C:\\Users\\user\\.platformio\\packages\\toolchain-riscv\\bin\\riscv-none-elf-g++.exe", "gdb_path": "C:\\Users\\user\\.platformio\\packages\\toolchain-riscv\\bin\\riscv-none-elf-gdb.exe", "prog_path": "c:\\Users\\user\\.platformio\\packages\\tool-mik32-uploader\\upload_drivers\\jtag_spifi\\.pio\\build\\mik32v2\\firmware.elf", "svd_path": "C:\\Users\\user\\.platformio\\platforms\\mik32\\misc\\svd\\mik32v2.svd", "compiler_type": "gcc", "targets": [{"name": "upload", "group": "Platform", "title": "Upload"}], "extra": {"flash_images": []}} \ No newline at end of file diff --git a/upload_drivers/jtag_spifi/src/main.c b/upload_drivers/jtag_spifi/src/main.c index 5d4fd8b..13551f4 100644 --- a/upload_drivers/jtag_spifi/src/main.c +++ b/upload_drivers/jtag_spifi/src/main.c @@ -16,7 +16,7 @@ const int BUFFER4K_SIZE = 4 * 1024; extern uint8_t *BUFFER4K[]; extern uint32_t *BUFFER_STATUS[]; -register uint32_t address asm("x31"); +register uint32_t address_reg asm("x31"); void SystemClock_Config(void); @@ -46,6 +46,9 @@ int main() while (1) { + uint32_t address = address_reg; + xprintf("ERASE SECTOR 0x%08x\n", address); + // xprintf("*BUFFER_STATUS 0x%08x\n", *BUFFER_STATUS); // asm ("wfi"); // *BUFFER_STATUS = 1; @@ -53,42 +56,26 @@ int main() HAL_SPIFI_Reset(&spifi); HAL_SPIFI_WaitResetClear(&spifi, HAL_SPIFI_TIMEOUT); - xprintf("ERASE SECTOR 0x%08x\n", address); HAL_SPIFI_W25_SectorErase4K(&spifi, address); - for (uint32_t ad = 0; ad < BUFFER4K_SIZE; ad += 256) + int result = 0; + + for (int ad = 0; ad < BUFFER4K_SIZE; ad += 256) { // xprintf("Write Page 0x%08x from 0x%08x\n", ad + address, (uint8_t *)((uint32_t)BUFFER4K + ad)); - HAL_SPIFI_W25_PageProgram(&spifi, ad + address, 256, (uint8_t *)((uint32_t)BUFFER4K + ad)); - } + HAL_SPIFI_W25_PageProgram(&spifi, address + ad, 256, (uint8_t *)((uint32_t)BUFFER4K + ad)); - SPIFI_MemoryCommandTypeDef cmd_mem = { - .OpCode = 0x03, - .FieldForm = SPIFI_CONFIG_CMD_FIELDFORM_ALL_SERIAL, - .FrameForm = SPIFI_CONFIG_CMD_FRAMEFORM_OPCODE_3ADDR, - .InterimData = 0, - .InterimLength = 0, - }; + uint8_t rb[256] = { 0 }; + HAL_SPIFI_W25_ReadData(&spifi, address + ad, 256, rb); - SPIFI_MemoryModeConfig_HandleTypeDef spifi_mem = { - .Instance = spifi.Instance, - .Command = cmd_mem, - }; - - HAL_SPIFI_MemoryMode_Init(&spifi_mem); - - int result = 0; - for (uint32_t ad = 0; ad < BUFFER4K_SIZE; ad += 4) - { - if (*(uint32_t *)(BUFFER4K + ad) != *(uint32_t *)(0x80000000 + address + ad)) + for (uint32_t b = 0; b < 256; b++) { - xprintf("addr[0x%08x] buf:mem = 0x%08x != 0x%08x\n", 0x80000000 + address + ad, *(uint32_t *)(BUFFER4K + ad), *(uint32_t *)(0x80000000 + address + ad)); - result = 3; - // break; - } - else - { - xprintf("addr[0x%08x] buf:mem = 0x%08x == 0x%08x\n", 0x80000000 + address + ad, *(uint32_t *)(BUFFER4K + ad), *(uint32_t *)(0x80000000 + address + ad)); + if (*(uint8_t *)((uint32_t)BUFFER4K + ad + b) != rb[b]) + { + xprintf("addr[0x%08x:0x%02x] buf:mem = 0x%02x != 0x%02x\n", (uint32_t)BUFFER4K + ad + b, b, *(uint8_t *)((uint32_t)BUFFER4K + ad + b), rb[b]); + result = 3; + // break; + } } }