Teensy 4: What triggers Halfkay to do a full flash erase

Thanks. That's what I did already, and compared the generated HEX files. I did not look into the Teensy loader, because it is the loader that reports the error and I want to know the reason. The code I create runs fine, and loading works with the previous version of the Teensy loader. Is the source code of the loader available somewhere?
 
No, but there are different versions of *cli.exe, that you can use to experiment

I have built teensy_loader_cli from the sources. So I could go back to previous versions. But the different behavior is related to the teensy loader at the board, not teensy_loader_cli. The ones with the old loader at the board work fine, the ones with the new loader buck.
 
OK,
as the teensy loader can do more than simply loading, so it is significant IP of PJRC.
 
But the different behavior is related to the teensy loader at the board, not teensy_loader_cli. The ones with the old loader at the board work fine, the ones with the new loader buck.

Please post one of the problematic HEX files. If using Quick Repky, click Go Advanced to get the full editor which lets you attach a file to you message.

I’ll give it a try here with both and try to get to the bottom of what’s going wrong with the open source CLI version.
 
Hello Paui,
thanks a lot. I have attached a file. The state is:
If a file created with Teensyduino is loaded to the device, I can load images of Circuitpython, MicroPython or Teensyduino without problems.
If either CircuitPython of Micropython is loaded, loading Files created with Teensyduino, or CircuitPython of MicroPython fails on the first attempt, and succeeds on the second.
 

Attachments

  • firmware.zip
    380.7 KB · Views: 23
Hi Paul and all,

I am also trying to debug why CircuitPython (CPy for short) installs also rebuild their File Filesystem on the first boot after updating the hex file...

I have started by adding some debug output to the startup code of CPy

So on startup on the first boot I see (Coming out logical Serial4)
Code:
Serial debug setup

### filesystem_init 1 0
        flash_read_blocks block:0 nb:1
        flash_read_blocks block:1 nb:1
        supervisor_flash_read_blocks block:0 nb:1 src:60100000
        f_mount res:d
        Create Fresh
        flash_read_blocks block:0 nb:1
        flash_read_blocks block:0 nb:1
        flash_read_blocks block:0 nb:1
        flash_read_blocks block:1 nb:1
        supervisor_flash_read_blocks block:0 nb:1 src:60100000
...
Note: They hard code their MBR (block 0), to return a fixed setup. If Not 0 it then goes to read the flash and as you can see here
it reads 60100000

And that is the last read it does, before it decides that the File system does not exist and has to remake a fresh copy.

I wanted to verify that their hex file was not writing within this range, so I hacked up a copy of the a teensy_loader_cli, that simply output the ranges of
memory that was read:

Code:
kurte@DESKTOP-BVOH5B0:~/github/teensy_loader_cli$ ./teensy_loader_dmp /mnt/d/firmware_41.hex 
60000000 - 60000200
60001000 - 60001030
6000c000 - 60010000
60010000 - 60020000
60020000 - 60030000
60030000 - 60040000
60040000 - 60050000
60050000 - 60060000
60060000 - 60070000
60070000 - 60080000
60080000 - 6008968c
$$

Note: I build CPy on Windows using WSL and then copy the hex file to common location /mnt/d and I use the teensy.exe to flash the T4.1 in this case.

I have a zip file here with the hex file with the debug output plus the hacked up teensly_loader_cli code (teens_loader_dmp.c)
 

Attachments

  • MPy_test.zip
    489.6 KB · Views: 24
Quick update: Trying to make it sure it actually was not preserved... So print hex the reads of logical cluster (0) - hard coded in the sketch and
the Cluster 1 which is the first sector of the fat:

Here is on fresh install:
Code:
Serial debug setup

### filesystem_init 1 0
ff.c-find_volume mode=0
        After IOCTL_STATUS
        After IOCTL_INIT stat:0
        flash_read_blocks block:0 nb:1
check_fs sect=0
        000 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        010 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        020 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        030 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        040 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        050 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        060 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        070 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        080 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        090 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        100 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        110 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        120 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        130 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        140 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        150 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        160 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        170 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        180 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        190 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF : ................
        1C0 : FF FF 01 FF FF FF 01 00 00 00 F8 37 00 00 00 00 : ...........7....
        1D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA : ..............U.
        After check_fs fmt:2
        flash_read_blocks block:1 nb:1
        supervisor_flash_read_blocks block:0 nb:1 src:60100000
check_fs sect=1
        000 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        010 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        020 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        030 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        040 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        050 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        060 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        070 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        080 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        090 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        0A0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        0B0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        0C0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        0D0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        0E0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        0F0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        100 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        110 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        120 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        130 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        140 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        150 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        160 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        170 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        180 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        190 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        1A0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        1B0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        1C0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        1D0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        1E0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        1F0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        f_mount res:d
        Create Fresh
        flash_read_blocks block:0 nb:1
Then power cycle and:
Code:
Serial debug setup

### filesystem_init 1 0
ff.c-find_volume mode=0
        After IOCTL_STATUS
        After IOCTL_INIT stat:0
        flash_read_blocks block:0 nb:1
check_fs sect=0
        000 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        010 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        020 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        030 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        040 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        050 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        060 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        070 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        080 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        090 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        100 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        110 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        120 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        130 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        140 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        150 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        160 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        170 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        180 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        190 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF : ................
        1C0 : FF FF 01 FF FF FF 01 00 00 00 F8 37 00 00 00 00 : ...........7....
        1D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA : ..............U.
        After check_fs fmt:2
        flash_read_blocks block:1 nb:1
        supervisor_flash_read_blocks block:0 nb:1 src:60100000
check_fs sect=1
        000 : EB FE 90 4D 53 44 4F 53 35 2E 30 00 02 02 01 00 : ...MSDOS5.0.....
        010 : 01 00 02 F8 37 F8 1C 00 3F 00 FF 00 01 00 00 00 : ....7...?.......
        020 : 00 00 00 00 80 00 29 00 00 21 EC 4E 4F 20 4E 41 : ......)..!.NO NA
        030 : 4D 45 20 20 20 20 46 41 54 20 20 20 20 20 00 00 : ME    FAT     ..
        040 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        050 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        060 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        070 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        080 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        090 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        0F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        100 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        110 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        120 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        130 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        140 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        150 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        160 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        170 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        180 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        190 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
        1F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA : ..............U.
        f_mount res:0
Adafruit CircuitPython 7.3.0-beta.1-44-gb71ea29a8-dirty on 2022-05-08; Teensy 4.1 with IMXRT1062DVJ6AAdafruit CircuitPython 7.3.0-be
So looks like this flash area was wiped on the update of code.

Edit: Output from Teensy app:
Code:
14:45:21.004 (loader): secure mode can not be locked: this is Standard Teensy
14:45:21.007 (loader): encryption is possible on this Teensy, but not yet configured
14:45:21.011 (loader): but without secure mode locked, encryption will NOT be secure!
14:45:21.015 (loader): Device came online, code_size = 8126464
14:45:21.018 (loader): Board is: Teensy 4.1 (IMXRT1062), version 1.07
14:45:21.247 (loader): File "D:\firmware_41.hex", 514624 bytes
14:45:21.250 (loader): File "firmware_41.hex". 514624 bytes, 6% used
14:45:21.288 (loader): set background IMG_ONLINE
14:45:21.399 (loader): File "D:\firmware_41.hex", 514624 bytes
14:45:21.402 (loader): File "firmware_41.hex". 514624 bytes, 6% used
14:45:21.446 (loader): can't open file 'D:\firmware_41.elf' (error 2: the system cannot find the file specified.)
14:45:21.449 (loader): elf file is for Unknown Board
14:45:21.451 (loader): using hex file
14:45:21.486 (loader): begin operation
14:45:21.543 (loader): flash, block=0, bs=1024, auto=1
14:45:21.550 (loader): flash, block=4, bs=1024, auto=1
14:45:21.563 (loader): flash, block=48, bs=1024, auto=1
14:45:23.087 (loader): flash, block=49, bs=1024, auto=1
14:45:23.091 (loader): flash, block=50, bs=1024, auto=1
14:45:23.093 (loader): flash, block=51, bs=1024, auto=1
14:45:23.099 (loader): flash, block=52, bs=1024, auto=1
14:45:23.103 (loader): flash, block=53, bs=1024, auto=1
14:45:23.106 (loader): flash, block=54, bs=1024, auto=1
14:45:23.110 (loader): flash, block=55, bs=1024, auto=1
14:45:23.115 (loader): flash, block=56, bs=1024, auto=1
14:45:23.119 (loader): flash, block=57, bs=1024, auto=1
14:45:23.123 (loader): flash, block=58, bs=1024, auto=1
14:45:23.128 (loader): flash, block=59, bs=1024, auto=1
14:45:23.131 (loader): flash, block=60, bs=1024, auto=1
14:45:23.136 (loader): flash, block=61, bs=1024, auto=1
14:45:23.140 (loader): flash, block=62, bs=1024, auto=1
14:45:23.147 (loader): flash, block=63, bs=1024, auto=1
14:45:23.151 (loader): flash, block=64, bs=1024, auto=1
14:45:23.155 (loader): flash, block=65, bs=1024, auto=1
14:45:23.160 (loader): flash, block=66, bs=1024, auto=1
14:45:23.164 (loader): flash, block=67, bs=1024, auto=1
14:45:23.169 (loader): flash, block=68, bs=1024, auto=1
14:45:23.174 (loader): flash, block=69, bs=1024, auto=1
14:45:23.181 (loader): flash, block=70, bs=1024, auto=1
14:45:23.186 (loader): flash, block=71, bs=1024, auto=1
14:45:23.190 (loader): flash, block=72, bs=1024, auto=1
14:45:23.196 (loader): flash, block=73, bs=1024, auto=1
14:45:23.201 (loader): flash, block=74, bs=1024, auto=1
14:45:23.206 (loader): flash, block=75, bs=1024, auto=1
14:45:23.211 (loader): flash, block=76, bs=1024, auto=1
14:45:23.217 (loader): flash, block=77, bs=1024, auto=1
14:45:23.227 (loader): flash, block=78, bs=1024, auto=1
14:45:23.234 (loader): flash, block=79, bs=1024, auto=1
14:45:23.240 (loader): flash, block=80, bs=1024, auto=1
14:45:23.249 (loader): flash, block=81, bs=1024, auto=1
14:45:23.254 (loader): flash, block=82, bs=1024, auto=1
14:45:23.261 (loader): flash, block=83, bs=1024, auto=1
14:45:23.267 (loader): flash, block=84, bs=1024, auto=1
14:45:23.273 (loader): flash, block=85, bs=1024, auto=1
14:45:23.281 (loader): flash, block=86, bs=1024, auto=1
14:45:23.286 (loader): flash, block=87, bs=1024, auto=1
14:45:23.293 (loader): flash, block=88, bs=1024, auto=1
14:45:23.300 (loader): flash, block=89, bs=1024, auto=1
14:45:23.306 (loader): flash, block=90, bs=1024, auto=1
14:45:23.314 (loader): flash, block=91, bs=1024, auto=1
14:45:23.320 (loader): flash, block=92, bs=1024, auto=1
14:45:23.326 (loader): flash, block=93, bs=1024, auto=1
14:45:23.333 (loader): flash, block=94, bs=1024, auto=1
14:45:23.339 (loader): flash, block=95, bs=1024, auto=1
14:45:23.347 (loader): flash, block=96, bs=1024, auto=1
14:45:23.353 (loader): flash, block=97, bs=1024, auto=1
14:45:23.360 (loader): flash, block=98, bs=1024, auto=1
14:45:23.365 (loader): flash, block=99, bs=1024, auto=1
14:45:23.371 (loader): flash, block=100, bs=1024, auto=1
14:45:23.378 (loader): flash, block=101, bs=1024, auto=1
14:45:23.384 (loader): flash, block=102, bs=1024, auto=1
14:45:23.388 (loader): flash, block=103, bs=1024, auto=1
14:45:23.394 (loader): flash, block=104, bs=1024, auto=1
14:45:23.399 (loader): flash, block=105, bs=1024, auto=1
14:45:23.404 (loader): flash, block=106, bs=1024, auto=1
14:45:23.410 (loader): flash, block=107, bs=1024, auto=1
14:45:23.416 (loader): flash, block=108, bs=1024, auto=1
14:45:23.421 (loader): flash, block=109, bs=1024, auto=1
14:45:23.427 (loader): flash, block=110, bs=1024, auto=1
14:45:23.434 (loader): flash, block=111, bs=1024, auto=1
14:45:23.440 (loader): flash, block=112, bs=1024, auto=1
14:45:23.445 (loader): flash, block=113, bs=1024, auto=1
14:45:23.452 (loader): flash, block=114, bs=1024, auto=1
14:45:23.459 (loader): flash, block=115, bs=1024, auto=1
14:45:23.465 (loader): flash, block=116, bs=1024, auto=1
14:45:23.469 (loader): flash, block=117, bs=1024, auto=1
14:45:23.476 (loader): flash, block=118, bs=1024, auto=1
14:45:23.482 (loader): flash, block=119, bs=1024, auto=1
14:45:23.488 (loader): flash, block=120, bs=1024, auto=1
14:45:23.493 (loader): flash, block=121, bs=1024, auto=1
14:45:23.498 (loader): flash, block=122, bs=1024, auto=1
14:45:23.506 (loader): flash, block=123, bs=1024, auto=1
14:45:23.513 (loader): flash, block=124, bs=1024, auto=1
14:45:23.518 (loader): flash, block=125, bs=1024, auto=1
14:45:23.524 (loader): flash, block=126, bs=1024, auto=1
14:45:23.530 (loader): flash, block=127, bs=1024, auto=1
14:45:23.535 (loader): flash, block=128, bs=1024, auto=1
14:45:23.540 (loader): flash, block=129, bs=1024, auto=1
14:45:23.546 (loader): flash, block=130, bs=1024, auto=1
14:45:23.553 (loader): flash, block=131, bs=1024, auto=1
14:45:23.558 (loader): flash, block=132, bs=1024, auto=1
14:45:23.564 (loader): flash, block=133, bs=1024, auto=1
14:45:23.570 (loader): flash, block=134, bs=1024, auto=1
14:45:23.577 (loader): flash, block=135, bs=1024, auto=1
14:45:23.582 (loader): flash, block=136, bs=1024, auto=1
14:45:23.588 (loader): flash, block=137, bs=1024, auto=1
14:45:23.593 (loader): flash, block=138, bs=1024, auto=1
14:45:23.600 (loader): flash, block=139, bs=1024, auto=1
14:45:23.604 (loader): flash, block=140, bs=1024, auto=1
14:45:23.609 (loader): flash, block=141, bs=1024, auto=1
14:45:23.614 (loader): flash, block=142, bs=1024, auto=1
14:45:23.618 (loader): flash, block=143, bs=1024, auto=1
14:45:23.624 (loader): flash, block=144, bs=1024, auto=1
14:45:23.630 (loader): flash, block=145, bs=1024, auto=1
14:45:23.637 (loader): flash, block=146, bs=1024, auto=1
14:45:23.643 (loader): flash, block=147, bs=1024, auto=1
14:45:23.649 (loader): flash, block=148, bs=1024, auto=1
14:45:23.654 (loader): flash, block=149, bs=1024, auto=1
14:45:23.660 (loader): flash, block=150, bs=1024, auto=1
14:45:23.666 (loader): flash, block=151, bs=1024, auto=1
14:45:23.672 (loader): flash, block=152, bs=1024, auto=1
14:45:23.680 (loader): flash, block=153, bs=1024, auto=1
14:45:23.685 (loader): flash, block=154, bs=1024, auto=1
14:45:23.690 (loader): flash, block=155, bs=1024, auto=1
14:45:23.696 (loader): flash, block=156, bs=1024, auto=1
14:45:23.701 (loader): flash, block=157, bs=1024, auto=1
14:45:23.707 (loader): flash, block=158, bs=1024, auto=1
14:45:23.713 (loader): flash, block=159, bs=1024, auto=1
14:45:23.718 (loader): flash, block=160, bs=1024, auto=1
14:45:23.724 (loader): flash, block=161, bs=1024, auto=1
14:45:23.730 (loader): flash, block=162, bs=1024, auto=1
14:45:23.736 (loader): flash, block=163, bs=1024, auto=1
14:45:23.741 (loader): flash, block=164, bs=1024, auto=1
14:45:23.748 (loader): flash, block=165, bs=1024, auto=1
14:45:23.754 (loader): flash, block=166, bs=1024, auto=1
14:45:23.761 (loader): flash, block=167, bs=1024, auto=1
14:45:23.765 (loader): flash, block=168, bs=1024, auto=1
14:45:23.771 (loader): flash, block=169, bs=1024, auto=1
14:45:23.777 (loader): flash, block=170, bs=1024, auto=1
14:45:23.783 (loader): flash, block=171, bs=1024, auto=1
14:45:23.788 (loader): flash, block=172, bs=1024, auto=1
14:45:23.794 (loader): flash, block=173, bs=1024, auto=1
14:45:23.800 (loader): flash, block=174, bs=1024, auto=1
14:45:23.805 (loader): flash, block=175, bs=1024, auto=1
14:45:23.811 (loader): flash, block=176, bs=1024, auto=1
14:45:23.817 (loader): flash, block=177, bs=1024, auto=1
14:45:23.822 (loader): flash, block=178, bs=1024, auto=1
14:45:23.828 (loader): flash, block=179, bs=1024, auto=1
14:45:23.834 (loader): flash, block=180, bs=1024, auto=1
14:45:23.840 (loader): flash, block=181, bs=1024, auto=1
14:45:23.845 (loader): flash, block=182, bs=1024, auto=1
14:45:23.851 (loader): flash, block=183, bs=1024, auto=1
14:45:23.857 (loader): flash, block=184, bs=1024, auto=1
14:45:23.862 (loader): flash, block=185, bs=1024, auto=1
14:45:23.868 (loader): flash, block=186, bs=1024, auto=1
14:45:23.873 (loader): flash, block=187, bs=1024, auto=1
14:45:23.880 (loader): flash, block=188, bs=1024, auto=1
14:45:23.885 (loader): flash, block=189, bs=1024, auto=1
14:45:23.890 (loader): flash, block=190, bs=1024, auto=1
14:45:23.896 (loader): flash, block=191, bs=1024, auto=1
14:45:23.901 (loader): flash, block=192, bs=1024, auto=1
14:45:23.907 (loader): flash, block=193, bs=1024, auto=1
14:45:23.914 (loader): flash, block=194, bs=1024, auto=1
14:45:23.918 (loader): flash, block=195, bs=1024, auto=1
14:45:23.924 (loader): flash, block=196, bs=1024, auto=1
14:45:23.930 (loader): flash, block=197, bs=1024, auto=1
14:45:23.936 (loader): flash, block=198, bs=1024, auto=1
14:45:23.941 (loader): flash, block=199, bs=1024, auto=1
14:45:23.947 (loader): flash, block=200, bs=1024, auto=1
14:45:23.953 (loader): flash, block=201, bs=1024, auto=1
14:45:23.960 (loader): flash, block=202, bs=1024, auto=1
14:45:23.964 (loader): flash, block=203, bs=1024, auto=1
14:45:23.970 (loader): flash, block=204, bs=1024, auto=1
14:45:23.976 (loader): flash, block=205, bs=1024, auto=1
14:45:23.981 (loader): flash, block=206, bs=1024, auto=1
14:45:23.987 (loader): flash, block=207, bs=1024, auto=1
14:45:23.993 (loader): flash, block=208, bs=1024, auto=1
14:45:23.999 (loader): flash, block=209, bs=1024, auto=1
14:45:24.004 (loader): flash, block=210, bs=1024, auto=1
14:45:24.010 (loader): flash, block=211, bs=1024, auto=1
14:45:24.016 (loader): flash, block=212, bs=1024, auto=1
14:45:24.020 (loader): flash, block=213, bs=1024, auto=1
14:45:24.025 (loader): flash, block=214, bs=1024, auto=1
14:45:24.031 (loader): flash, block=215, bs=1024, auto=1
14:45:24.035 (loader): flash, block=216, bs=1024, auto=1
14:45:24.040 (loader): flash, block=217, bs=1024, auto=1
14:45:24.045 (loader): flash, block=218, bs=1024, auto=1
14:45:24.050 (loader): flash, block=219, bs=1024, auto=1
14:45:24.054 (loader): flash, block=220, bs=1024, auto=1
14:45:24.059 (loader): flash, block=221, bs=1024, auto=1
14:45:24.064 (loader): flash, block=222, bs=1024, auto=1
14:45:24.068 (loader): flash, block=223, bs=1024, auto=1
14:45:24.073 (loader): flash, block=224, bs=1024, auto=1
14:45:24.079 (loader): flash, block=225, bs=1024, auto=1
14:45:24.083 (loader): flash, block=226, bs=1024, auto=1
14:45:24.088 (loader): flash, block=227, bs=1024, auto=1
14:45:24.093 (loader): flash, block=228, bs=1024, auto=1
14:45:24.098 (loader): flash, block=229, bs=1024, auto=1
14:45:24.103 (loader): flash, block=230, bs=1024, auto=1
14:45:24.108 (loader): flash, block=231, bs=1024, auto=1
14:45:24.113 (loader): flash, block=232, bs=1024, auto=1
14:45:24.117 (loader): flash, block=233, bs=1024, auto=1
14:45:24.122 (loader): flash, block=234, bs=1024, auto=1
14:45:24.127 (loader): flash, block=235, bs=1024, auto=1
14:45:24.131 (loader): flash, block=236, bs=1024, auto=1
14:45:24.136 (loader): flash, block=237, bs=1024, auto=1
14:45:24.141 (loader): flash, block=238, bs=1024, auto=1
14:45:24.146 (loader): flash, block=239, bs=1024, auto=1
14:45:24.150 (loader): flash, block=240, bs=1024, auto=1
14:45:24.155 (loader): flash, block=241, bs=1024, auto=1
14:45:24.161 (loader): flash, block=242, bs=1024, auto=1
14:45:24.166 (loader): flash, block=243, bs=1024, auto=1
14:45:24.170 (loader): flash, block=244, bs=1024, auto=1
14:45:24.177 (loader): flash, block=245, bs=1024, auto=1
14:45:24.182 (loader): flash, block=246, bs=1024, auto=1
14:45:24.188 (loader): flash, block=247, bs=1024, auto=1
14:45:24.193 (loader): flash, block=248, bs=1024, auto=1
14:45:24.198 (loader): flash, block=249, bs=1024, auto=1
14:45:24.204 (loader): flash, block=250, bs=1024, auto=1
14:45:24.210 (loader): flash, block=251, bs=1024, auto=1
14:45:24.216 (loader): flash, block=252, bs=1024, auto=1
14:45:24.221 (loader): flash, block=253, bs=1024, auto=1
14:45:24.228 (loader): flash, block=254, bs=1024, auto=1
14:45:24.234 (loader): flash, block=255, bs=1024, auto=1
14:45:24.240 (loader): flash, block=256, bs=1024, auto=1
14:45:24.245 (loader): flash, block=257, bs=1024, auto=1
14:45:24.252 (loader): flash, block=258, bs=1024, auto=1
14:45:24.257 (loader): flash, block=259, bs=1024, auto=1
14:45:24.262 (loader): flash, block=260, bs=1024, auto=1
14:45:24.268 (loader): flash, block=261, bs=1024, auto=1
14:45:24.275 (loader): flash, block=262, bs=1024, auto=1
14:45:24.282 (loader): flash, block=263, bs=1024, auto=1
14:45:24.287 (loader): flash, block=264, bs=1024, auto=1
14:45:24.292 (loader): flash, block=265, bs=1024, auto=1
14:45:24.298 (loader): flash, block=266, bs=1024, auto=1
14:45:24.304 (loader): flash, block=267, bs=1024, auto=1
14:45:24.309 (loader): flash, block=268, bs=1024, auto=1
14:45:24.315 (loader): flash, block=269, bs=1024, auto=1
14:45:24.321 (loader): flash, block=270, bs=1024, auto=1
14:45:24.328 (loader): flash, block=271, bs=1024, auto=1
14:45:24.332 (loader): flash, block=272, bs=1024, auto=1
14:45:24.338 (loader): flash, block=273, bs=1024, auto=1
14:45:24.345 (loader): flash, block=274, bs=1024, auto=1
14:45:24.349 (loader): flash, block=275, bs=1024, auto=1
14:45:24.355 (loader): flash, block=276, bs=1024, auto=1
14:45:24.362 (loader): flash, block=277, bs=1024, auto=1
14:45:24.368 (loader): flash, block=278, bs=1024, auto=1
14:45:24.373 (loader): flash, block=279, bs=1024, auto=1
14:45:24.379 (loader): flash, block=280, bs=1024, auto=1
14:45:24.385 (loader): flash, block=281, bs=1024, auto=1
14:45:24.390 (loader): flash, block=282, bs=1024, auto=1
14:45:24.397 (loader): flash, block=283, bs=1024, auto=1
14:45:24.403 (loader): flash, block=284, bs=1024, auto=1
14:45:24.409 (loader): flash, block=285, bs=1024, auto=1
14:45:24.414 (loader): flash, block=286, bs=1024, auto=1
14:45:24.420 (loader): flash, block=287, bs=1024, auto=1
14:45:24.426 (loader): flash, block=288, bs=1024, auto=1
14:45:24.432 (loader): flash, block=289, bs=1024, auto=1
14:45:24.437 (loader): flash, block=290, bs=1024, auto=1
14:45:24.444 (loader): flash, block=291, bs=1024, auto=1
14:45:24.450 (loader): flash, block=292, bs=1024, auto=1
14:45:24.456 (loader): flash, block=293, bs=1024, auto=1
14:45:24.461 (loader): flash, block=294, bs=1024, auto=1
14:45:24.467 (loader): flash, block=295, bs=1024, auto=1
14:45:24.473 (loader): flash, block=296, bs=1024, auto=1
14:45:24.480 (loader): flash, block=297, bs=1024, auto=1
14:45:24.485 (loader): flash, block=298, bs=1024, auto=1
14:45:24.492 (loader): flash, block=299, bs=1024, auto=1
14:45:24.498 (loader): flash, block=300, bs=1024, auto=1
14:45:24.503 (loader): flash, block=301, bs=1024, auto=1
14:45:24.510 (loader): flash, block=302, bs=1024, auto=1
14:45:24.516 (loader): flash, block=303, bs=1024, auto=1
14:45:24.522 (loader): flash, block=304, bs=1024, auto=1
14:45:24.528 (loader): flash, block=305, bs=1024, auto=1
14:45:24.532 (loader): flash, block=306, bs=1024, auto=1
14:45:24.539 (loader): flash, block=307, bs=1024, auto=1
14:45:24.545 (loader): flash, block=308, bs=1024, auto=1
14:45:24.550 (loader): flash, block=309, bs=1024, auto=1
14:45:24.556 (loader): flash, block=310, bs=1024, auto=1
14:45:24.562 (loader): flash, block=311, bs=1024, auto=1
14:45:24.566 (loader): flash, block=312, bs=1024, auto=1
14:45:24.573 (loader): flash, block=313, bs=1024, auto=1
14:45:24.579 (loader): flash, block=314, bs=1024, auto=1
14:45:24.585 (loader): flash, block=315, bs=1024, auto=1
14:45:24.591 (loader): flash, block=316, bs=1024, auto=1
14:45:24.597 (loader): flash, block=317, bs=1024, auto=1
14:45:24.602 (loader): flash, block=318, bs=1024, auto=1
14:45:24.606 (loader): flash, block=319, bs=1024, auto=1
14:45:24.612 (loader): flash, block=320, bs=1024, auto=1
14:45:24.618 (loader): flash, block=321, bs=1024, auto=1
14:45:24.624 (loader): flash, block=322, bs=1024, auto=1
14:45:24.630 (loader): flash, block=323, bs=1024, auto=1
14:45:24.635 (loader): flash, block=324, bs=1024, auto=1
14:45:24.639 (loader): flash, block=325, bs=1024, auto=1
14:45:24.644 (loader): flash, block=326, bs=1024, auto=1
14:45:24.651 (loader): flash, block=327, bs=1024, auto=1
14:45:24.658 (loader): flash, block=328, bs=1024, auto=1
14:45:24.664 (loader): flash, block=329, bs=1024, auto=1
14:45:24.668 (loader): flash, block=330, bs=1024, auto=1
14:45:24.673 (loader): flash, block=331, bs=1024, auto=1
14:45:24.680 (loader): flash, block=332, bs=1024, auto=1
14:45:24.684 (loader): flash, block=333, bs=1024, auto=1
14:45:24.689 (loader): flash, block=334, bs=1024, auto=1
14:45:24.694 (loader): flash, block=335, bs=1024, auto=1
14:45:24.699 (loader): flash, block=336, bs=1024, auto=1
14:45:24.703 (loader): flash, block=337, bs=1024, auto=1
14:45:24.709 (loader): flash, block=338, bs=1024, auto=1
14:45:24.713 (loader): flash, block=339, bs=1024, auto=1
14:45:24.718 (loader): flash, block=340, bs=1024, auto=1
14:45:24.723 (loader): flash, block=341, bs=1024, auto=1
14:45:24.728 (loader): flash, block=342, bs=1024, auto=1
14:45:24.733 (loader): flash, block=343, bs=1024, auto=1
14:45:24.737 (loader): flash, block=344, bs=1024, auto=1
14:45:24.742 (loader): flash, block=345, bs=1024, auto=1
14:45:24.747 (loader): flash, block=346, bs=1024, auto=1
14:45:24.752 (loader): flash, block=347, bs=1024, auto=1
14:45:24.756 (loader): flash, block=348, bs=1024, auto=1
14:45:24.762 (loader): flash, block=349, bs=1024, auto=1
14:45:24.767 (loader): flash, block=350, bs=1024, auto=1
14:45:24.772 (loader): flash, block=351, bs=1024, auto=1
14:45:24.777 (loader): flash, block=352, bs=1024, auto=1
14:45:24.782 (loader): flash, block=353, bs=1024, auto=1
14:45:24.787 (loader): flash, block=354, bs=1024, auto=1
14:45:24.791 (loader): flash, block=355, bs=1024, auto=1
14:45:24.796 (loader): flash, block=356, bs=1024, auto=1
14:45:24.802 (loader): flash, block=357, bs=1024, auto=1
14:45:24.807 (loader): flash, block=358, bs=1024, auto=1
14:45:24.814 (loader): flash, block=359, bs=1024, auto=1
14:45:24.820 (loader): flash, block=360, bs=1024, auto=1
14:45:24.826 (loader): flash, block=361, bs=1024, auto=1
14:45:24.832 (loader): flash, block=362, bs=1024, auto=1
14:45:24.837 (loader): flash, block=363, bs=1024, auto=1
14:45:24.843 (loader): flash, block=364, bs=1024, auto=1
14:45:24.849 (loader): flash, block=365, bs=1024, auto=1
14:45:24.855 (loader): flash, block=366, bs=1024, auto=1
14:45:24.860 (loader): flash, block=367, bs=1024, auto=1
14:45:24.867 (loader): flash, block=368, bs=1024, auto=1
14:45:24.873 (loader): flash, block=369, bs=1024, auto=1
14:45:24.879 (loader): flash, block=370, bs=1024, auto=1
14:45:24.884 (loader): flash, block=371, bs=1024, auto=1
14:45:24.890 (loader): flash, block=372, bs=1024, auto=1
14:45:24.895 (loader): flash, block=373, bs=1024, auto=1
14:45:24.899 (loader): flash, block=374, bs=1024, auto=1
14:45:24.905 (loader): flash, block=375, bs=1024, auto=1
14:45:24.910 (loader): flash, block=376, bs=1024, auto=1
14:45:24.915 (loader): flash, block=377, bs=1024, auto=1
14:45:24.920 (loader): flash, block=378, bs=1024, auto=1
14:45:24.924 (loader): flash, block=379, bs=1024, auto=1
14:45:24.930 (loader): flash, block=380, bs=1024, auto=1
14:45:24.936 (loader): flash, block=381, bs=1024, auto=1
14:45:24.941 (loader): flash, block=382, bs=1024, auto=1
14:45:24.946 (loader): flash, block=383, bs=1024, auto=1
14:45:24.951 (loader): flash, block=384, bs=1024, auto=1
14:45:24.956 (loader): flash, block=385, bs=1024, auto=1
14:45:24.961 (loader): flash, block=386, bs=1024, auto=1
14:45:24.966 (loader): flash, block=387, bs=1024, auto=1
14:45:24.971 (loader): flash, block=388, bs=1024, auto=1
14:45:24.976 (loader): flash, block=389, bs=1024, auto=1
14:45:24.981 (loader): flash, block=390, bs=1024, auto=1
14:45:24.985 (loader): flash, block=391, bs=1024, auto=1
14:45:24.990 (loader): flash, block=392, bs=1024, auto=1
14:45:24.996 (loader): flash, block=393, bs=1024, auto=1
14:45:25.000 (loader): flash, block=394, bs=1024, auto=1
14:45:25.005 (loader): flash, block=395, bs=1024, auto=1
14:45:25.010 (loader): flash, block=396, bs=1024, auto=1
14:45:25.015 (loader): flash, block=397, bs=1024, auto=1
14:45:25.020 (loader): flash, block=398, bs=1024, auto=1
14:45:25.024 (loader): flash, block=399, bs=1024, auto=1
14:45:25.029 (loader): flash, block=400, bs=1024, auto=1
14:45:25.035 (loader): flash, block=401, bs=1024, auto=1
14:45:25.040 (loader): flash, block=402, bs=1024, auto=1
14:45:25.045 (loader): flash, block=403, bs=1024, auto=1
14:45:25.049 (loader): flash, block=404, bs=1024, auto=1
14:45:25.054 (loader): flash, block=405, bs=1024, auto=1
14:45:25.059 (loader): flash, block=406, bs=1024, auto=1
14:45:25.064 (loader): flash, block=407, bs=1024, auto=1
14:45:25.069 (loader): flash, block=408, bs=1024, auto=1
14:45:25.074 (loader): flash, block=409, bs=1024, auto=1
14:45:25.079 (loader): flash, block=410, bs=1024, auto=1
14:45:25.084 (loader): flash, block=411, bs=1024, auto=1
14:45:25.089 (loader): flash, block=412, bs=1024, auto=1
14:45:25.094 (loader): flash, block=413, bs=1024, auto=1
14:45:25.099 (loader): flash, block=414, bs=1024, auto=1
14:45:25.104 (loader): flash, block=415, bs=1024, auto=1
14:45:25.109 (loader): flash, block=416, bs=1024, auto=1
14:45:25.113 (loader): flash, block=417, bs=1024, auto=1
14:45:25.118 (loader): flash, block=418, bs=1024, auto=1
14:45:25.123 (loader): flash, block=419, bs=1024, auto=1
14:45:25.128 (loader): flash, block=420, bs=1024, auto=1
14:45:25.133 (loader): flash, block=421, bs=1024, auto=1
14:45:25.138 (loader): flash, block=422, bs=1024, auto=1
14:45:25.143 (loader): flash, block=423, bs=1024, auto=1
14:45:25.148 (loader): flash, block=424, bs=1024, auto=1
14:45:25.153 (loader): flash, block=425, bs=1024, auto=1
14:45:25.158 (loader): flash, block=426, bs=1024, auto=1
14:45:25.163 (loader): flash, block=427, bs=1024, auto=1
14:45:25.168 (loader): flash, block=428, bs=1024, auto=1
14:45:25.173 (loader): flash, block=429, bs=1024, auto=1
14:45:25.178 (loader): flash, block=430, bs=1024, auto=1
14:45:25.183 (loader): flash, block=431, bs=1024, auto=1
14:45:25.188 (loader): flash, block=432, bs=1024, auto=1
14:45:25.193 (loader): flash, block=433, bs=1024, auto=1
14:45:25.198 (loader): flash, block=434, bs=1024, auto=1
14:45:25.203 (loader): flash, block=435, bs=1024, auto=1
14:45:25.208 (loader): flash, block=436, bs=1024, auto=1
14:45:25.213 (loader): flash, block=437, bs=1024, auto=1
14:45:25.218 (loader): flash, block=438, bs=1024, auto=1
14:45:25.222 (loader): flash, block=439, bs=1024, auto=1
14:45:25.228 (loader): flash, block=440, bs=1024, auto=1
14:45:25.233 (loader): flash, block=441, bs=1024, auto=1
14:45:25.238 (loader): flash, block=442, bs=1024, auto=1
14:45:25.244 (loader): flash, block=443, bs=1024, auto=1
14:45:25.249 (loader): flash, block=444, bs=1024, auto=1
14:45:25.254 (loader): flash, block=445, bs=1024, auto=1
14:45:25.258 (loader): flash, block=446, bs=1024, auto=1
14:45:25.263 (loader): flash, block=447, bs=1024, auto=1
14:45:25.268 (loader): flash, block=448, bs=1024, auto=1
14:45:25.273 (loader): flash, block=449, bs=1024, auto=1
14:45:25.278 (loader): flash, block=450, bs=1024, auto=1
14:45:25.283 (loader): flash, block=451, bs=1024, auto=1
14:45:25.288 (loader): flash, block=452, bs=1024, auto=1
14:45:25.296 (loader): flash, block=453, bs=1024, auto=1
14:45:25.301 (loader): flash, block=454, bs=1024, auto=1
14:45:25.305 (loader): flash, block=455, bs=1024, auto=1
14:45:25.310 (loader): flash, block=456, bs=1024, auto=1
14:45:25.315 (loader): flash, block=457, bs=1024, auto=1
14:45:25.320 (loader): flash, block=458, bs=1024, auto=1
14:45:25.324 (loader): flash, block=459, bs=1024, auto=1
14:45:25.331 (loader): flash, block=460, bs=1024, auto=1
14:45:25.336 (loader): flash, block=461, bs=1024, auto=1
14:45:25.340 (loader): flash, block=462, bs=1024, auto=1
14:45:25.345 (loader): flash, block=463, bs=1024, auto=1
14:45:25.350 (loader): flash, block=464, bs=1024, auto=1
14:45:25.355 (loader): flash, block=465, bs=1024, auto=1
14:45:25.360 (loader): flash, block=466, bs=1024, auto=1
14:45:25.365 (loader): flash, block=467, bs=1024, auto=1
14:45:25.370 (loader): flash, block=468, bs=1024, auto=1
14:45:25.375 (loader): flash, block=469, bs=1024, auto=1
14:45:25.380 (loader): flash, block=470, bs=1024, auto=1
14:45:25.384 (loader): flash, block=471, bs=1024, auto=1
14:45:25.389 (loader): flash, block=472, bs=1024, auto=1
14:45:25.394 (loader): flash, block=473, bs=1024, auto=1
14:45:25.398 (loader): flash, block=474, bs=1024, auto=1
14:45:25.403 (loader): flash, block=475, bs=1024, auto=1
14:45:25.408 (loader): flash, block=476, bs=1024, auto=1
14:45:25.413 (loader): flash, block=477, bs=1024, auto=1
14:45:25.418 (loader): flash, block=478, bs=1024, auto=1
14:45:25.423 (loader): flash, block=479, bs=1024, auto=1
14:45:25.428 (loader): flash, block=480, bs=1024, auto=1
14:45:25.434 (loader): flash, block=481, bs=1024, auto=1
14:45:25.440 (loader): flash, block=482, bs=1024, auto=1
14:45:25.445 (loader): flash, block=483, bs=1024, auto=1
14:45:25.450 (loader): flash, block=484, bs=1024, auto=1
14:45:25.455 (loader): flash, block=485, bs=1024, auto=1
14:45:25.460 (loader): flash, block=486, bs=1024, auto=1
14:45:25.465 (loader): flash, block=487, bs=1024, auto=1
14:45:25.470 (loader): flash, block=488, bs=1024, auto=1
14:45:25.475 (loader): flash, block=489, bs=1024, auto=1
14:45:25.480 (loader): flash, block=490, bs=1024, auto=1
14:45:25.485 (loader): flash, block=491, bs=1024, auto=1
14:45:25.490 (loader): flash, block=492, bs=1024, auto=1
14:45:25.495 (loader): flash, block=493, bs=1024, auto=1
14:45:25.499 (loader): flash, block=494, bs=1024, auto=1
14:45:25.504 (loader): flash, block=495, bs=1024, auto=1
14:45:25.509 (loader): flash, block=496, bs=1024, auto=1
14:45:25.515 (loader): flash, block=497, bs=1024, auto=1
14:45:25.520 (loader): flash, block=498, bs=1024, auto=1
14:45:25.525 (loader): flash, block=499, bs=1024, auto=1
14:45:25.530 (loader): flash, block=500, bs=1024, auto=1
14:45:25.534 (loader): flash, block=501, bs=1024, auto=1
14:45:25.539 (loader): flash, block=502, bs=1024, auto=1
14:45:25.545 (loader): flash, block=503, bs=1024, auto=1
14:45:25.549 (loader): flash, block=504, bs=1024, auto=1
14:45:25.554 (loader): flash, block=505, bs=1024, auto=1
14:45:25.559 (loader): flash, block=506, bs=1024, auto=1
14:45:25.564 (loader): flash, block=507, bs=1024, auto=1
14:45:25.568 (loader): flash, block=508, bs=1024, auto=1
14:45:25.573 (loader): flash, block=509, bs=1024, auto=1
14:45:25.579 (loader): flash, block=510, bs=1024, auto=1
14:45:25.583 (loader): flash, block=511, bs=1024, auto=1
14:45:25.588 (loader): flash, block=512, bs=1024, auto=1
14:45:25.593 (loader): flash, block=513, bs=1024, auto=1
14:45:25.598 (loader): flash, block=514, bs=1024, auto=1
14:45:25.603 (loader): flash, block=515, bs=1024, auto=1
14:45:25.607 (loader): flash, block=516, bs=1024, auto=1
14:45:25.614 (loader): flash, block=517, bs=1024, auto=1
14:45:25.619 (loader): flash, block=518, bs=1024, auto=1
14:45:25.624 (loader): flash, block=519, bs=1024, auto=1
14:45:25.629 (loader): flash, block=520, bs=1024, auto=1
14:45:25.633 (loader): flash, block=521, bs=1024, auto=1
14:45:25.638 (loader): flash, block=522, bs=1024, auto=1
14:45:25.643 (loader): flash, block=523, bs=1024, auto=1
14:45:25.648 (loader): flash, block=524, bs=1024, auto=1
14:45:25.654 (loader): flash, block=525, bs=1024, auto=1
14:45:25.658 (loader): flash, block=526, bs=1024, auto=1
14:45:25.663 (loader): flash, block=527, bs=1024, auto=1
14:45:25.670 (loader): flash, block=528, bs=1024, auto=1
14:45:25.678 (loader): flash, block=529, bs=1024, auto=1
14:45:25.685 (loader): flash, block=530, bs=1024, auto=1
14:45:25.690 (loader): flash, block=531, bs=1024, auto=1
14:45:25.695 (loader): flash, block=532, bs=1024, auto=1
14:45:25.700 (loader): flash, block=533, bs=1024, auto=1
14:45:25.704 (loader): flash, block=534, bs=1024, auto=1
14:45:25.709 (loader): flash, block=535, bs=1024, auto=1
14:45:25.714 (loader): flash, block=536, bs=1024, auto=1
14:45:25.718 (loader): flash, block=537, bs=1024, auto=1
14:45:25.723 (loader): flash, block=538, bs=1024, auto=1
14:45:25.728 (loader): flash, block=539, bs=1024, auto=1
14:45:25.733 (loader): flash, block=540, bs=1024, auto=1
14:45:25.738 (loader): flash, block=541, bs=1024, auto=1
14:45:25.743 (loader): flash, block=542, bs=1024, auto=1
14:45:25.748 (loader): flash, block=543, bs=1024, auto=1
14:45:25.753 (loader): flash, block=544, bs=1024, auto=1
14:45:25.757 (loader): flash, block=545, bs=1024, auto=1
14:45:25.763 (loader): flash, block=546, bs=1024, auto=1
14:45:25.768 (loader): flash, block=547, bs=1024, auto=1
14:45:25.773 (loader): flash, block=548, bs=1024, auto=1
14:45:25.778 (loader): flash, block=549, bs=1024, auto=1
14:45:25.785 (loader): flash, block=550, bs=1024, auto=1
14:45:25.821 (loader): sending reboot
14:45:25.832 (loader): begin wait_until_offline
14:45:25.848 (loader): offline, waited 0
14:45:25.858 (loader): end operation, total time = 4.369 seconds
14:45:25.869 (loader): set background IMG_REBOOT_OK
14:45:25.877 (loader): redraw timer set, image 14 to show for 1200 ms
14:45:26.011 (loader): HID/win32:  vid:058F pid:9410 ver:0122  usb:0/140000/0/A/B
14:45:26.024 (loader): HID/win32:  vid:058F pid:9410 ver:0122  usb:0/140000/0/A/B
14:45:26.032 (loader): HID/win32:  vid:045E pid:07A5 ver:0797  usb:0/140000/0/9/B
14:45:26.039 (loader): HID/win32:  vid:045E pid:07A5 ver:0797  usb:0/140000/0/9/B
14:45:26.046 (loader): HID/win32:  vid:045E pid:07A5 ver:0797  usb:0/140000/0/9/A
14:45:26.053 (loader): HID/win32:  vid:045E pid:07A5 ver:0797  usb:0/140000/0/9/B
14:45:27.069 (loader): redraw, image 9
 
Last edited:
Playing around some more: Curious about what ranges of data do MicroPython and CircuitPython define in hex file versus standard Arduino build:

Arduino build using current beta Teeensyduino
Code:
kurte@DESKTOP-BVOH5B0:~/github/teensy_loader_cli$ ./teensy_loader_dmp /mnt/d/CircuitMicroPython.ino.hex
60000000 - 60010000
60010000 - 60020000
60020000 - 60030000
60030000 - 60032400
$$

Circuit Python build for T4.1
Code:
kurte@DESKTOP-BVOH5B0:~/github/teensy_loader_cli$ ./teensy_loader_dmp /mnt/d/firmware.hex
60000000 - 60000200
60001000 - 60001030
6000c000 - 60010000
60010000 - 60020000
60020000 - 60030000
60030000 - 60040000
60040000 - 60050000
60050000 - 60060000
60060000 - 60070000
60070000 - 60080000
60080000 - 60089810
$$

Micropython build for T4.1..
Code:
kurte@DESKTOP-BVOH5B0:~/github/teensy_loader_cli$ ./teensy_loader_dmp ~/github/micropython/ports/mimxrt/build-TEENSY41/firmware.hex
60000000 - 60000200
60001000 - 60001030
60002000 - 60010000
60010000 - 60020000
60020000 - 60030000
60030000 - 60040000
60040000 - 60050000
60050000 - 60060000
60060000 - 6006d128
$$

Next up go through my CLI program and dump program and see if there are other hints in hex file I am not reporting.
 
The only other thing I thought I would test, is to verify that on the same Teensy (4.1) if an Arduino sketch created a LittleFS_Program disk starting at the same place if it was retained or not.

So I hacked up the mtp_teensy example sketch simplified/Example_1_MTP_LittleFS.ino sketch to size the LittleFS_Program disk to be such that it started at 0x60100000
And see if it would retain the data.
Code:
  // I want it to start at 0x60100000 like CircuitPython flash data.
  #if defined(ARDUINO_TEENSY40)
  #define FLASH_SIZE  0x1F0000
  #elif defined(ARDUINO_TEENSY41)
  #define FLASH_SIZE  0x7C0000
  #elif defined(ARDUINO_TEENSY_MICROMOD)
  #define FLASH_SIZE  0xFC0000
  #endif
  // LittleFS uses to compute the baseaddr...
  //  baseaddr = 0x60000000 + FLASH_SIZE - size;
  // So I want size ....
   uint32_t  disk_size = (0x60000000 + FLASH_SIZE) - 0x60100000;
   progdisk.begin(disk_size);   // minimum program disk size is 256k.

I edited littlefs code to enable some of the commented out prints and verified that was the address computed.

I then programmed T4.1 with it. and in MTP added some files.
I then rebooted. Still there.... I then reprogrammed... Still there.

I then took the changes over to my Ubuntu machine (as I don't have a build of teensy_loader_cli for windows)... Someday will setup to build it...
I then tried programming again using Beta 1 with Teensy app and it worked. I also tried it with teensy_loader_cli and still worked.

Still looked like similar ranges in hex file:
Code:
kurte@DESKTOP-BVOH5B0:~/github/teensy_loader_cli$ ./teensy_loader_dmp /mnt/c/Users/kurte/AppData/Local/Temp/arduino_build_Example_1_MTP_LittleFS.ino/Example_1_MTP_LittleFS.ino.hex
60000000 - 60010000
60010000 - 6001b000
$$

I don't know anything else to try here. SO will put this on the shelf for now.
 
I don't know anything else to try here. SO will put this on the shelf for now.

I lied :D

I wondered as the only real difference between Teensy build and these other builds was these other builds left areas in their region of memory that they did not write anything to.

So I hacked up a copy of the teensy_loader_cli.c
And added a -f option which fills the holes in the memory ranges with 0's

again quick and dirty.

Pushed up a new fork/branch (experiments) with this plus the range dumper code...
https://github.com/KurtE/teensy_loader_cli/tree/experiments

I then loaded it up on my Ubuntu machine. I used it to flash the CircuitPython sketch with this option... Reboooted, copied a couple other files on it.
Then reprogrammed it again using this option...

And the files were still there :D

So probably a pretty good hint.
 
Note: Not sure if the one time that I thought the files was preserved was a fluke or not.

As I mentioned up on other thread, finally have version of teensy_loader_cli I can build with VisualStudio 2022, so now easier to play with changes.

Still trying to figure out what controls how much of the flash is erased. And what main thing is different with the CircuitPython (short hand CPy) hex files
versus normal arduino built...

One hint earlier in the thread was I think the boot data area So I print out this data now and found the size was set to 8mb...
So I updated the build to get it to match the ending of the flash data, as you can see from the debug output:
Code:
D:\>teensy_loader_cli --mcu=teensy41 -w -v -d firmware_41.hex
Teensy Loader, Command Line, Version 2.S
60000000 - 60000200
60001000 - 60001030
6000c000 - 60010000
60010000 - 60020000
60020000 - 60030000
60030000 - 60040000
60040000 - 60050000
60050000 - 60060000
60060000 - 60070000
60070000 - 60080000
60080000 - 60089790
$$

Boot data: 60000000 00089790(563088) 00000000
Read "firmware_41.hex": 514496 bytes, 6.3% usage
Found HalfKay Bootloader
Programming...............
Booting

But it still erased the file system... Debug output from Cpy:
Code:
And it still erases the File system, which I confirmed in CPy debug code
        After check_fs fmt:2
        flash_read_blocks block:1 nb:1
        supervisor_flash_read_blocks block:0 nb:1 src:60100000
check_fs sect=1
        000 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        010 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        020 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
        030 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF : ................
...

Again as compared to Teensy build with LittleFS program setup to start at same address, with a bunch of garbage added to get the image size larger
Code:
C:\Users\kurte\AppData\Local\Temp\arduino_build_837163>teensy_loader_cli --mcu=teensy41 -w -v -d mtp_littlefs_retain_test.ino.hex
Teensy Loader, Command Line, Version 2.S
60000000 - 60010000
60010000 - 60020000
60020000 - 60030000
60030000 - 60040000
60040000 - 60050000
60050000 - 60060000
60060000 - 60070000
60070000 - 60080000
60080000 - 60090000
60090000 - 600a0000
600a0000 - 600a7800
$$

Boot data: 60000000 000a7800(686080) 00000000
Read "mtp_littlefs_retain_test.ino.hex": 686080 bytes, 8.4% usage
Found HalfKay Bootloader
Programming...........................................

And the file system was retained.

Debug output from sketch:
Code:
Boot data: 60000000 000a7800(686080) 00000000
Program flash begin
size in bytes - 7077888 
FLASH_SIZE - 8126464, program_size - 686080
available_space = 7440384
size - 7077888,  baseaddr = 60100000

One thing that confused me was that in the Teensy build the three lines matched:

600a0000 - 600a7800
Boot data: 60000000 000a7800(686080) 00000000
Read "mtp_littlefs_retain_test.ino.hex": 686080 bytes, 8.4% usage

But in the Cpy, The () value and the Read value did not match. But figured out the Read was how many bytes were read for the hex and in the case of Teensy build, the whole range from MIN to MAX is read so it matches, but in Cpy case there are the gaps.

Now back to...
 
Thanks for the investigations. I tried as well to create images without gaps, but that did not change the picture. I had also cases (see my initial post) where the files systems seemed to be retained. But that was only due to the bootloader not erasing all data, if the image was not that large. With the firmware image growing, that did not happen any more.

P.S.: Sorry for responding late. For some reason I do not get a notification if someone writes to that thread. Meanwhiel I just added a note to my documentation that the Teensy loader might fail, and people should just retry.
 
Thanks. I'll look into that. Just hacking the version number was not sufficient. And I know that I fixed the image length during my trials. But I have to verify.
 
It works to some extend. The teensy loader still fails at the first attempt, with the log:
Code:
teensy_loader_cli --mcu=TEENSY40 -v -w build-TEENSY40/firmware.hex
Teensy Loader, Command Line, Version 2.2
Read "build-TEENSY40/firmware.hex": 353348 bytes, 17.4% usage
Found HalfKay Bootloader
Programming...error writing to Teensy
I assumes that this confused me. But on the second attempt it loads and keeps the file system.
The version numbers of teensy_loader_cli differ. Your's is 2.5, mine is 2.2, which is the one from the most recent repository state.
Trying with a Teensy 4.0.
 
Last edited:
I believe that 2.2 is the current released one.
I do have my own version, although not sure if I changed the version number.
I did add a few things I could remove, that I used to debug... Like option to show the ranges of memory contained within the file, and the fill holes option...

The main difference in a Pull Request I have still pending into the CLI: https://github.com/PaulStoffregen/teensy_loader_cli/pull/79
Is I made a version that I could build on Windows using Visual Studio.

Not sure if Paul will pull it in or not... Could remove the other extensions...
 
Strange enough, the upload error does not appear when using the GUI version of the teensy loader. Before I tried the CLI version.
 
I am experiencing similar issues with the flash memory seemingly not being fully erased. For some context, I am using Paul's littlefs wrapper to create a particular file in littlefs system if it does not exist on each power up. Thus, each time I flash, logically it should create a new file. It worked for quite some time but after many re-flashes over the last couple of months, this file started to persist across flashes.

The only ways I can truly remove the file is to either A) explicitly erase the file with littlefs API or B) do the 15 seconds hold down on the pushbutton and restore to the blinky program. But in subsequent flashes, the file continues to persist.

I've attached the .HEX file for reference (note, I've changed to extension to .c to get past the max file size restrictions).
 

Attachments

  • firmware.c
    458.6 KB · Views: 22
I am experiencing similar issues with the flash memory seemingly not being fully erased. For some context,

My concern was the opposite, that I wanted to keep the flash filesystem, but it was erased all the time. One thing I learned, that at certain time in the past, teensyduino would install a new bootloader to the board, which would NOT erase the file system. Maybe that happened to you, if you updated Teensyduino, which then changed the firmware update behavior.

The way it works now is almost perfect for me. I just notice a difference between the command-line Teensy loader and the GUI type Teensy loader, that is started by teensyduino. The command line loader fails on the first attempt.
 
I am experiencing similar issues with the flash memory seemingly not being fully erased. For some context, I am using Paul's littlefs wrapper to create a particular file in littlefs system if it does not exist on each power up. Thus, each time I flash, logically it should create a new file. It worked for quite some time but after many re-flashes over the last couple of months, this file started to persist across flashes.

The only ways I can truly remove the file is to either A) explicitly erase the file with littlefs API or B) do the 15 seconds hold down on the pushbutton and restore to the blinky program. But in subsequent flashes, the file continues to persist.

I've attached the .HEX file for reference (note, I've changed to extension to .c to get past the max file size restrictions).

By design with the new boot loader:
Some details are up on the page: https://www.pjrc.com/teensy/td_code_security.html in the section: Minimum Erase Size.

One hack you can do is to make your LittleFS FS be sufficiently large that it extends into the area not preserved.
 
I just notice a difference between the command-line Teensy loader and the GUI type Teensy loader, that is started by teensyduino. The command line loader fails on the first attempt.

Yes, I noticed this as well with the cli version. It was not always like this as far as I recall.

By design with the new boot loader:
Some details are up on the page: https://www.pjrc.com/teensy/td_code_security.html in the section: Minimum Erase Size.

One hack you can do is to make your LittleFS FS be sufficiently large that it extends into the area not preserved.

Thanks for the information! I'm very much a beginner so this is new to me, appreciate it. But I have some questions with regards to this hack. Would this cause part of the filesystem to be erased while the remaining is intact? Can this cause issues with littlefs? Is there a more "proper" solution(s)?
 
...
Thanks for the information! I'm very much a beginner so this is new to me, appreciate it. But I have some questions with regards to this hack. Would this cause part of the filesystem to be erased while the remaining is intact? Can this cause issues with littlefs? Is there a more "proper" solution(s)?

LFS stores a signature at the start. If that is missing then it will be created 'new'. So if upload format ( in the mandatory minimum area ) where code storage is not needed is used for LFS then losing those first bytes will fail to mount as existing, and start fresh.

A better way - if the LFS was to be selectively destroyed when new code was uploaded, would be to track the compile time {there was a post to this effect back some weeks} and use that to make a signature stored in EEPROM or perhaps an ID file on the LFS drive. When it doesn't match - format the drive fresh in setup.

Found that thread: How-to-make-LittleFS_Program-NOT-persistent-across-programming-cycles-on-MicroMod
 
LFS stores a signature at the start. If that is missing then it will be created 'new'. So if upload format ( in the mandatory minimum area ) where code storage is not needed is used for LFS then losing those first bytes will fail to mount as existing, and start fresh.

A better way - if the LFS was to be selectively destroyed when new code was uploaded, would be to track the compile time {there was a post to this effect back some weeks} and use that to make a signature stored in EEPROM or perhaps an ID file on the LFS drive. When it doesn't match - format the drive fresh in setup.

Found that thread: How-to-make-LittleFS_Program-NOT-persistent-across-programming-cycles-on-MicroMod

Thank you for the help!
 
Back
Top