@@ -339,11 +339,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(esp_set_native_code_location_obj, esp_set_nativ
339
339
340
340
#endif
341
341
342
-
343
-
344
-
345
-
346
-
342
+ /*
347
343
#include <stdarg.h>
348
344
int mp_vprintf(const mp_print_t *print, const char *fmt, va_list args);
349
345
STATIC void _strncat(char *data, const char *str, size_t len){
@@ -379,83 +375,28 @@ STATIC mp_obj_t esp_showMemory(mp_obj_t _start, mp_obj_t _size) {
379
375
return mp_const_none;
380
376
}
381
377
STATIC MP_DEFINE_CONST_FUN_OBJ_2(esp_showMemory_obj, esp_showMemory);
378
+ */
382
379
383
380
uint32_t dfu_blks [256 ];
384
381
uint8_t dfu_offs [256 ];
385
382
int dfu_nblks = -1 ;
386
383
uint32_t dfu_fwsize = 0 ;
387
384
388
- // STATIC int MP_FASTCODE(verify_erase)(size_t sector, uint8_t byte){
389
- // char *ptr = FLASH_START+sector*FLASH_SEC_SIZE;
390
- // int ret = 0;
391
- // for(int x=0; x<FLASH_SEC_SIZE; x++)
392
- // if(ptr[x]!=byte) ret++;
393
- // return ret;
394
- // }
395
- void inline sync_all (){
396
- __asm__ volatile ("memw" );
397
- __asm__ volatile ("isync" );
385
+ /* Firmware update codes must be put into IRAM, or will crash while flashing halfway! */
386
+ void MP_FASTCODE (erase_sector )(int sector ) {
387
+ char * ptr = FLASH_START + sector * FLASH_SEC_SIZE ;
388
+ for (char * PTR = ptr + FLASH_SEC_SIZE ; ptr < PTR ; ptr ++ )
389
+ if (* ptr != 0xff ){SPIEraseSector (sector );break ;}
398
390
}
399
- // void MP_FASTCODE(ram_erase_sector)(size_t sector){
400
- // // spi_flash_check_wr_protect();
401
- // // Cache_Read_Disable_2();
402
- // SPIEraseSector(sector);
403
- // // Cache_Read_Enable_2();
404
- // }
405
- // void MP_FASTCODE(ram_read_flash)(size_t src, void *dst, size_t sz){
406
- // Cache_Read_Disable_2();
407
- // // uart_tx_one_char(0, '1');
408
- // // sync_all();
409
- // SPIRead(src, dst, sz);
410
- // // uart_tx_one_char(0, '2');
411
- // // sync_all();
412
- // Cache_Read_Enable_2();
413
- // // uart_tx_one_char(0, '3');
414
- // // sync_all();
415
- // }
416
- // void MP_FASTCODE(ram_write_flash)(size_t dst, void *src, size_t sz){
417
- // spi_flash_check_wr_protect();
418
- // // sync_all();
419
- // // uart_tx_one_char(0, '1');
420
- // Cache_Read_Disable_2();
421
- // // sync_all();
422
- // // uart_tx_one_char(0, '2');
423
- // SPIWrite(dst, src, sz);
424
- // // sync_all();
425
- // // uart_tx_one_char(0, '3');
426
- // Cache_Read_Enable_2();
427
- // // sync_all();
428
- // // uart_tx_one_char(0, '4');
429
- // }
430
- void MP_FASTCODE (DFU )(char * dfu_buf , int n_erase ) {
431
- for (int x = 0 ; x < n_erase ; x ++ ){
432
- SPIEraseSector (x );
391
+ void MP_FASTCODE (DFU )(char * dfu_buf , int n_fwblks , int n_erase ) {
392
+ for (int x = 0 ; x < n_fwblks ; x ++ ){
393
+ erase_sector (x );
433
394
// uart_tx_one_char(0, 'E');
434
395
}
435
396
436
397
int cur_write_pos = 0 ;
437
398
int cur_write_sz ;
438
399
int remaining_sz = dfu_fwsize ;
439
- /*
440
- memset(dfu_buf, 0, FLASH_SEC_SIZE);
441
- for(int x=0xff; x>=0; x--){
442
- while(verify_erase(x, 0xff)){
443
- // ram_write_flash(x*FLASH_SEC_SIZE, dfu_buf, FLASH_SEC_SIZE);
444
- ram_erase_sector(x);
445
- while(verify_erase(x, 0xff)){
446
- uart_tx_one_char(0, 'f');
447
- wdt_feed();
448
- }
449
- uart_tx_one_char(0, 'x');
450
- }
451
- uart_tx_one_char(0, '.');
452
- uart_tx_one_char(0, ' ');
453
- wdt_feed();
454
- }
455
- uart_tx_one_char(0, 'O');
456
- uart_tx_one_char(0, 'K');
457
- uart_tx_one_char(0, '\n'); */
458
-
459
400
460
401
for (int x = 0 ; x < dfu_nblks && remaining_sz > 0 ; x ++ ){
461
402
cur_write_sz = FLASH_SEC_SIZE - dfu_offs [x ];
@@ -473,72 +414,47 @@ void MP_FASTCODE(DFU)(char *dfu_buf, int n_erase) {
473
414
remaining_sz -= cur_write_sz ;
474
415
wdt_feed ();
475
416
}
476
- // uart_tx_one_char(0, 'O');
477
- // uart_tx_one_char(0, 'K');
478
- // uart_tx_one_char(0, '\r');
479
- // uart_tx_one_char(0, '\n');
480
- sync_all ();
417
+
418
+ for (int x = n_fwblks ; x < n_erase ; x ++ ){
419
+ erase_sector (x );
420
+ // uart_tx_one_char(0, 'E');
421
+ }
422
+
423
+ asm ("memw" );
424
+ asm ("isync" );
481
425
// rom_phy_reset_req();
482
426
system_restart_core ();
483
427
// return cur_write_pos;
484
428
}
485
- STATIC mp_obj_t esp_DFU (void ) {
486
- int state ;
429
+ STATIC mp_obj_t esp_DFU (mp_obj_t erase_all ) {
430
+ extern char flashchip ;
431
+ SpiFlashChip * flash = (SpiFlashChip * )(& flashchip + 4 );
487
432
char * buf = malloc (FLASH_SEC_SIZE );
488
433
if (buf == NULL ){
489
- mp_hal_stdout_tx_str ( "Not enough memory!\r\n" );
434
+ mp_raise_OSError ( MP_ENOMEM );
490
435
return mp_const_none ;
491
436
}
492
- /*
493
- buf[0] = 0;
494
- _sprintf(&buf[0], "DFU(): %p\r\n", DFU);
495
- mp_hal_stdout_tx_str(buf);
496
- buf[0] = 0;
497
- _sprintf(&buf[0], "verify_erase(): %p\r\n", verify_erase);
498
- mp_hal_stdout_tx_str(buf);
499
- buf[0] = 0;
500
- _sprintf(&buf[0], "ram_erase_sector(): %p\r\n", ram_erase_sector);
501
- mp_hal_stdout_tx_str(buf);
502
- */
437
+
503
438
ets_wdt_disable ();
504
- state = disable_irq ();
505
- DFU (buf , dfu_fwsize /FLASH_SEC_SIZE + (dfu_fwsize %FLASH_SEC_SIZE ?1 :0 ));
439
+ disable_irq ();
440
+ DFU (buf , dfu_fwsize /FLASH_SEC_SIZE + (dfu_fwsize %FLASH_SEC_SIZE ?1 :0 ), mp_obj_is_true ( erase_all )?( flash -> chip_size / FLASH_SEC_SIZE ): 0 );
506
441
507
442
// It will NEVER reach here even if flash failed
508
443
// enable_irq(state);
509
444
// ets_wdt_enable();
510
445
511
446
return mp_const_none ;
512
447
}
513
- STATIC MP_DEFINE_CONST_FUN_OBJ_0 (esp_DFU_obj , esp_DFU );
448
+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (esp_DFU_obj , esp_DFU );
514
449
515
- STATIC mp_obj_t esp_setn (mp_obj_t cnter , mp_obj_t fsize ) {
516
- dfu_nblks = mp_obj_get_int (cnter );
450
+ STATIC mp_obj_t esp_set_dfu (mp_obj_t counter , mp_obj_t fsize ) {
451
+ dfu_nblks = mp_obj_get_int (counter );
517
452
dfu_fwsize = mp_obj_get_int (fsize );
518
453
return mp_const_none ;
519
454
}
520
- STATIC MP_DEFINE_CONST_FUN_OBJ_2 (esp_setn_obj , esp_setn );
455
+ STATIC MP_DEFINE_CONST_FUN_OBJ_2 (esp_set_dfu_obj , esp_set_dfu );
521
456
522
- STATIC mp_obj_t esp_getn () {
523
- return mp_obj_new_int (dfu_nblks );
524
- }
525
- STATIC MP_DEFINE_CONST_FUN_OBJ_0 (esp_getn_obj , esp_getn );
526
-
527
- // STATIC mp_obj_t esp_ram_read_flash(mp_obj_t offset, mp_obj_t size) {
528
- // int sz = mp_obj_get_int(size);
529
- // char *buf = malloc(sz);
530
- // if(!buf){
531
- // mp_raise_OSError(MP_ENOMEM);
532
- // return mp_const_none;
533
- // }
534
- // ram_read_flash(mp_obj_get_int(offset), buf, sz);
535
- // mp_obj_t ret_bytes = mp_obj_new_bytes(buf, sz);
536
- // free(buf);
537
- // return ret_bytes;
538
- // }
539
- // STATIC MP_DEFINE_CONST_FUN_OBJ_2(esp_ram_read_flash_obj, esp_ram_read_flash);
540
-
541
- STATIC mp_obj_t esp_showblks () {
457
+ STATIC mp_obj_t esp_get_blks () {
542
458
if (dfu_nblks <=0 )
543
459
return mp_obj_new_list (0 , NULL ), mp_obj_new_list (0 , NULL );
544
460
mp_obj_t ret1 = mp_obj_new_list (0 , NULL );
@@ -552,7 +468,7 @@ STATIC mp_obj_t esp_showblks() {
552
468
mp_obj_list_append (ret , ret2 );
553
469
return ret ;
554
470
}
555
- STATIC MP_DEFINE_CONST_FUN_OBJ_0 (esp_showblks_obj , esp_showblks );
471
+ STATIC MP_DEFINE_CONST_FUN_OBJ_0 (esp_get_blks_obj , esp_get_blks );
556
472
557
473
STATIC const mp_rom_map_elem_t esp_module_globals_table [] = {
558
474
{ MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_esp ) },
@@ -568,11 +484,9 @@ STATIC const mp_rom_map_elem_t esp_module_globals_table[] = {
568
484
{ MP_ROM_QSTR (MP_QSTR_flash_user_start ), MP_ROM_PTR (& esp_flash_user_start_obj ) },
569
485
570
486
{ MP_ROM_QSTR (MP_QSTR_DFU ), MP_ROM_PTR (& esp_DFU_obj ) },
571
- { MP_ROM_QSTR (MP_QSTR_showMemory ), MP_ROM_PTR (& esp_showMemory_obj ) },
572
- { MP_ROM_QSTR (MP_QSTR_setn ), MP_ROM_PTR (& esp_setn_obj ) },
573
- { MP_ROM_QSTR (MP_QSTR_getn ), MP_ROM_PTR (& esp_getn_obj ) },
574
- { MP_ROM_QSTR (MP_QSTR_showblks ), MP_ROM_PTR (& esp_showblks_obj ) },
575
- // { MP_ROM_QSTR(MP_QSTR_ram_read_flash), MP_ROM_PTR(&esp_ram_read_flash_obj) },
487
+ // { MP_ROM_QSTR(MP_QSTR_showMemory), MP_ROM_PTR(&esp_showMemory_obj) },
488
+ { MP_ROM_QSTR (MP_QSTR_set_dfu ), MP_ROM_PTR (& esp_set_dfu_obj ) },
489
+ { MP_ROM_QSTR (MP_QSTR_get_blks ), MP_ROM_PTR (& esp_get_blks_obj ) },
576
490
577
491
#if MICROPY_ESP8266_APA102
578
492
{ MP_ROM_QSTR (MP_QSTR_apa102_write ), MP_ROM_PTR (& esp_apa102_write_obj ) },
0 commit comments