text:
probe-rs is much slower than OpenOCD in download speed

Is your feature request related to a problem? Please describe.
I used the STM32H743VGT6 and tested the download speeds of probe-rs, Keil, and OpenOCD with the same firmware. The test results show that the speeds of probe-rs and Keil are similar. For probe-rs, I used the command
probe-rs download .\STM32H743VIT6.hex --format hex --chip STM32H743VGTx --protocol swd --speed 10000
The results showed a total of 512KB erased and 507KB programmed, with an erasure speed of 71.35KB/s and a programming speed of 65.46KB/s, totaling 16.922 seconds.
OpenOCD was tested with the command
openocd -f interface/cmsis-dap.cfg -f target/stm32h7x.cfg -c "adapter_khz 10000" -c "program D:\STM32H743VIT6.hex verify reset exit" -d
the final results were calculated from the log messages, showing an erasure time of 3.413s at a speed of 150KB/s and a programming time of 4.406s at a speed of 115KB/s. I noticed through the timing prints that OpenOCD constantly calls the target_run_flash_async_algorithm function, caching the download data in the MCU. But probe-rs also enabled double buffering, I located in the probe-rs source code and removed std::thread::sleep(Duration::from_millis(1)); from wait_for_completion, which could increase the download speed to 81KB/s. However, it is still significantly slower compared to OpenOCD.
Describe the solution you'd like
Have you considered compatibility with OpenOCD's flash download algorithm or other methods to increase speed?
Describe alternatives you've considered
Additional context
OpenOCD Test.log

This is rather odd. probe-rs should easily reach the same speeds. Can you try and run the benchmark command? :)

This is rather odd. probe-rs should easily reach the same speeds. Can you try and run the benchmark command? :)这很奇怪。 probe-rs 应该很容易达到相同的速度。您可以尝试运行基准测试命令吗？ :)

the benchmark result：
probe-rs benchmark --address 0x20000000 --chip STM32H743VGTx --speed 10000

Probe: Probe type CMSIS-DAP, debug interface not specified, target chip STM32H743VGTx

Test: Speed 10000, Word size 32bit, Data length 4 bytes, Number of iterations 5
Results: Read: 30944.29 bytes/s Std Dev 511.57, Write: 4068965.52 bytes/s Std Dev 1862068.97

Test: Speed 10000, Word size 32bit, Data length 32 bytes, Number of iterations 5
Results: Read: 104930.39 bytes/s Std Dev 28851.69, Write: 110136.56 bytes/s Std Dev 17480.59

Test: Speed 10000, Word size 32bit, Data length 128 bytes, Number of iterations 5
Results: Read: 175022.53 bytes/s Std Dev 29742.62, Write: 190013.51 bytes/s Std Dev 9636.99

Test: Speed 10000, Word size 32bit, Data length 2048 bytes, Number of iterations 5
Results: Read: 241678.32 bytes/s Std Dev 5935.73, Write: 258893.71 bytes/s Std Dev 16412.64

Test: Speed 10000, Word size 32bit, Data length 32768 bytes, Number of iterations 5
Results: Read: 254849.03 bytes/s Std Dev 2569.25, Write: 265996.05 bytes/s Std Dev 3259.28

Would you mind also attaching a log on the DEBUG level when you flash with probe-rs? Maybe double buffering is not used. Because the raw probe speed is fine. So it should only be limited by flash speed. Ofc it can happen that the flash algo is imperformant in which case it's not strictly our fault. In that case we would have to write our own.

I have executed the code in debug mode and made sure that double buffering is enabled. To check whether double buffering is turned on in the code, it not only checks the disable flag but also assesses the size of RAM. The STM32H7 satisfies the requirements for enabling double buffer tuning, and through debugging, I have indeed witnessed the code running through the double buffer branch. I suspect that the variation in erase speeds may stem from differences in the download algorithms, but it appears that the programming speed might be linked to the logic within probe-rs. In contrast, enabling logging in OpenOCD does not noticeably impact the download speed. When testing the download speed on both a dual-core A7 1GHz ARM and an AMD 7840H processor platform, the difference is not significant—with the same 507KB firmware, the time difference is around 1 second. However, with probe-rs, turning on logging even on the AMD 7840H platform significantly slows down the download speed, which is less than half when logging is disabled. Similarly, with logging turned off, the benchmark results for probe-rs on the dual-core A7 platform are as follows:
 probe-rs benchmark --address 0x20000000 --chip STM32H743VGTx --speed 10000

probe-rs benchmark --address 0x20000000 --chip STM32H743VGTx --speed 10000
Probe: Probe type CMSIS-DAP, debug interface not specified, target chip STM32H743VGTx

Test: Speed 10000, Word size 32bit, Data length 4 bytes, Number of iterations 5
Results: Read: 10461.04 bytes/s Std Dev 1084.36, Write: 553454.21 bytes/s Std Dev 70311.43

Test: Speed 10000, Word size 32bit, Data length 32 bytes, Number of iterations 5
Results: Read: 50189.17 bytes/s Std Dev 10040.47, Write: 38842.05 bytes/s Std Dev 5974.69

Test: Speed 10000, Word size 32bit, Data length 128 bytes, Number of iterations 5
Results: Read: 94418.22 bytes/s Std Dev 4258.57, Write: 88512.52 bytes/s Std Dev 8958.54

Test: Speed 10000, Word size 32bit, Data length 2048 bytes, Number of iterations 5
Results: Read: 129597.29 bytes/s Std Dev 13375.66, Write: 123760.49 bytes/s Std Dev 14233.32

Test: Speed 10000, Word size 32bit, Data length 32768 bytes, Number of iterations 5
Results: Read: 138249.18 bytes/s Std Dev 2835.41, Write: 131775.39 bytes/s Std Dev 1910.84

Yeah, formatting values in Rust is not optimized for speed.
There was some optimizations WRT logging recently. What version of probe-rs do you run?
Also the second benchmark you posted is half the speed of the first one, yet you say you disabled logging in the second one?
If you believe it is the logging, could you disable the logging for a flash speed benchmark? :)

I'm very sorry if my answer caused any confusion. I conducted the tests using version 0.23.0.
The first comparison was to test the impact of debug logging on download performance; if logging is enabled, the speed drops to about half of what it is with logging turned off.
The second comparison looked at the effect of different processor performances on download speed, using the benchmark command included with probe-rs, which does not enable debug logging. The benchmark for the 7840H is as follows,
probe-rs benchmark --address 0x20000000 --chip STM32H743VGTx --speed 10000
Probe: Probe type CMSIS-DAP, debug interface not specified, target chip STM32H743VGTx

Test: Speed 10000, Word size 32bit, Data length 4 bytes, Number of iterations 5
Results: Read: 30944.29 bytes/s Std Dev 511.57, Write: 4068965.52 bytes/s Std Dev 1862068.97

Test: Speed 10000, Word size 32bit, Data length 32 bytes, Number of iterations 5
Results: Read: 104930.39 bytes/s Std Dev 28851.69, Write: 110136.56 bytes/s Std Dev 17480.59

Test: Speed 10000, Word size 32bit, Data length 128 bytes, Number of iterations 5
Results: Read: 175022.53 bytes/s Std Dev 29742.62, Write: 190013.51 bytes/s Std Dev 9636.99

Test: Speed 10000, Word size 32bit, Data length 2048 bytes, Number of iterations 5
Results: Read: 241678.32 bytes/s Std Dev 5935.73, Write: 258893.71 bytes/s Std Dev 16412.64

Test: Speed 10000, Word size 32bit, Data length 32768 bytes, Number of iterations 5
Results: Read: 254849.03 bytes/s Std Dev 2569.25, Write: 265996.05 bytes/s Std Dev 3259.28

and the benchmark for the dual-core 1GHz A7 is as follows:
 probe-rs benchmark --address 0x20000000 --chip STM32H743VGTx --speed 10000

probe-rs benchmark --address 0x20000000 --chip STM32H743VGTx --speed 10000
Probe: Probe type CMSIS-DAP, debug interface not specified, target chip STM32H743VGTx

Test: Speed 10000, Word size 32bit, Data length 4 bytes, Number of iterations 5
Results: Read: 10461.04 bytes/s Std Dev 1084.36, Write: 553454.21 bytes/s Std Dev 70311.43

Test: Speed 10000, Word size 32bit, Data length 32 bytes, Number of iterations 5
Results: Read: 50189.17 bytes/s Std Dev 10040.47, Write: 38842.05 bytes/s Std Dev 5974.69

Test: Speed 10000, Word size 32bit, Data length 128 bytes, Number of iterations 5
Results: Read: 94418.22 bytes/s Std Dev 4258.57, Write: 88512.52 bytes/s Std Dev 8958.54

Test: Speed 10000, Word size 32bit, Data length 2048 bytes, Number of iterations 5
Results: Read: 129597.29 bytes/s Std Dev 13375.66, Write: 123760.49 bytes/s Std Dev 14233.32

Test: Speed 10000, Word size 32bit, Data length 32768 bytes, Number of iterations 5
Results: Read: 138249.18 bytes/s Std Dev 2835.41, Write: 131775.39 bytes/s Std Dev 1910.84

The difference in results is significant.
I also tested the download speeds with openocd on these two processors. For a 507KB firmware, the total download time on the dual-core A7 is about 1 second slower than on the 7840H. Therefore, I believe that probe-rs has higher processor performance requirements than openocd, or it may still need optimization.

Thanks a lot for the clarification! That's actually terrible! The host should never be the bottleneck! I will run some tests and try find the culprit :)

Hi, how to disable log, just not use --log-file flag?
My test result is much more worse than yours. I use AMD 5700G with Windows 11 and Allwinner H618 with the ubuntu orangepi offered, use the master version and build with --release. and the results are here.
H618
orangepi@orangepizero2w:~$ ./probe-rs --version
probe-rs 0.24.0 (git commit: v0.1.0-266-gb15caaee)

orangepi@orangepizero2w:~$ ./probe-rs download --chip nRF52832_xxAA --binary-format hex --speed 1000 firmware/xxx.hex
      Erasing ✔ 100% [####################] 320.00 KiB @  33.09 KiB/s (took 10s)
  Programming ✔ 100% [####################] 316.00 KiB @   6.96 KiB/s (took 45s)
Finished in 46.62s

orangepi@orangepizero2w:~$ ./probe-rs benchmark --chip nRF52832_xxAA --speed 1000 --address 0x20000000
Probe: Probe type CMSIS-DAP, debug interface not specified, target chip nRF52832_xxAA

Test: Speed 1000, Word size 32bit, Data length 4 bytes, Number of iterations 5
Results: Read: 1000.78 bytes/s Std Dev 0.26, Write: 1880219.32 bytes/s Std Dev 460496.62

Test: Speed 1000, Word size 32bit, Data length 32 bytes, Number of iterations 5
Results: Read: 3999.00 bytes/s Std Dev 2.38, Write: 3997.51 bytes/s Std Dev 5.63

Test: Speed 1000, Word size 32bit, Data length 128 bytes, Number of iterations 5
Results: Read: 8000.19 bytes/s Std Dev 0.41, Write: 7996.35 bytes/s Std Dev 9.11

Test: Speed 1000, Word size 32bit, Data length 2048 bytes, Number of iterations 5
Results: Read: 12799.95 bytes/s Std Dev 0.13, Write: 12800.32 bytes/s Std Dev 0.20

Test: Speed 1000, Word size 32bit, Data length 32768 bytes, Number of iterations 5
Results: Read: 12799.96 bytes/s Std Dev 0.19, Write: 12800.30 bytes/s Std Dev 0.28

5700G
PS C:\Users\xxx\Downloads> C:\Users\xxx\Documents\GitHub\probe-rs\target\release\probe-rs.exe --version
probe-rs 0.24.0 (git commit: v0.1.0-266-gb15caaee)

PS C:\Users\xxx\Downloads> C:\Users\xxx\Documents\GitHub\probe-rs\target\release\probe-rs.exe download --chip nRF52832_xxAA --binary-format hex "xxx.hex"
      Erasing ✔ 100% [####################] 320.00 KiB @ 210.99 KiB/s (took 2s)
  Programming ✔ 100% [####################] 316.00 KiB @  23.33 KiB/s (took 14s)
     Finished in 13.86s

PS C:\Users\xxx\Downloads> C:\Users\xxx\Documents\GitHub\probe-rs\target\release\probe-rs.exe benchmark --chip nRF52832_xxAA --speed 1000 --address 0x20000000
Probe: Probe type CMSIS-DAP, debug interface not specified, target chip nRF52832_xxAA

Test: Speed 1000, Word size 32bit, Data length 4 bytes, Number of iterations 5
Results: Read: 5976.26 bytes/s Std Dev 36.19, Write: 4706959.71 bytes/s Std Dev 2198473.65

Test: Speed 1000, Word size 32bit, Data length 32 bytes, Number of iterations 5
Results: Read: 22215.48 bytes/s Std Dev 331.04, Write: 22043.68 bytes/s Std Dev 291.24

Test: Speed 1000, Word size 32bit, Data length 128 bytes, Number of iterations 5
Results: Read: 27561.87 bytes/s Std Dev 804.36, Write: 27785.35 bytes/s Std Dev 206.51

Test: Speed 1000, Word size 32bit, Data length 2048 bytes, Number of iterations 5
Results: Read: 30566.71 bytes/s Std Dev 134.70, Write: 30569.79 bytes/s Std Dev 97.80

Test: Speed 1000, Word size 32bit, Data length 32768 bytes, Number of iterations 5
Results: Read: 30662.78 bytes/s Std Dev 6.93, Write: 30608.35 bytes/s Std Dev 19.50

What's more, I don't notice that the h618 cpu usage would go full via htop when flashing, it always lower than 10% i think.

Hi, how to disable log, just not use --log-file flag?

Your printout indicates that logging isn't enabled. I haven't tested probe-rs for a while, but I used it in library form before. If the official binary includes a logging framework, you can usually enable logging by using export RUST_LOG=debug or another log level. By the way, the test results also depend on the speed of the downloader, so make sure the downloader isn't a bottleneck.

What is your commit based on? Did you try an up2date master?
Also, can you time the run with pyocd? It combines the numbers for erase and programming, so ofc the average speed would be in the middle between erasing and programming.
nRF52832_xxAA should be super fast to program - I would rule out issues with the flash algorithm.
--speed 1000 of course makes this super slow. 1MHz is nothing. Try 10000 or even higher.
What puts me off a bit is that the benchmark has such high numbers for single byte write in both cases. I would expect this to be slowest. @9names do you have any insight here? Just an anomaly?

What is your commit based on? Did you try an up 2 date master?

master version at that time

nRF52832_xxAA should be super fast to program - I would rule out issues with the flash algorithm.
--speed 1000 of course makes this super slow. 1MHz is nothing. Try 10000 or even higher.

I have tested in faster speed, like 4M and 10M. But no quality improvement.

Also, can you time the run with pyocd? It combines the numbers for erase and programming, so ofc the average speed would be in the middle between erasing and programming.

The number at the beginning of the log should be the time in ms. I would test it again on Monday.

pyocd & 1M
orangepi@orangepizero2w:~$ pyocd flash -t nrf52 -f 1M -Lpyocd.flash.flash.trace=debug firmware/xxx.hex
0003024 I Loading /home/orangepi/firmware/xxx.hex [load_cmd]
0004516 D algo init and load to 0x20000000 [flash]
0004657 D algo call init(addr=0, clock=0, op=3) [flash]
0004683 D init result = 0 [flash]
0004709 D call compute crc(20002000, 4f) [flash]
[                                                  ]   0%
0004835 D algo call init(addr=0, clock=0, op=1) [flash]
0004860 D init result = 0 [flash]
0004861 D call erase_sector(0) [flash]
0004882 D erase_sector result = 0 [flash]
[                                                  ]   0%
0004883 D call erase_sector(1000) [flash]
0004903 D erase_sector result = 0 [flash]
[                                                  ]   0%
0004904 D call erase_sector(2000) [flash]
0004924 D erase_sector result = 0 [flash]
[                                                  ]   1%
0004925 D call erase_sector(3000) [flash]
0004945 D erase_sector result = 0 [flash]
[                                                  ]   1%
0004946 D call erase_sector(4000) [flash]
0004966 D erase_sector result = 0 [flash]
[                                                  ]   1%
0004967 D call erase_sector(5000) [flash]
0004987 D erase_sector result = 0 [flash]
[                                                  ]   1%
0004988 D call erase_sector(6000) [flash]
0005008 D erase_sector result = 0 [flash]
[                                                  ]   2%
0005009 D call erase_sector(7000) [flash]
0005029 D erase_sector result = 0 [flash]
[                                                  ]   2%
0005030 D call erase_sector(8000) [flash]
0005050 D erase_sector result = 0 [flash]
[                                                  ]   2%
0005051 D call erase_sector(9000) [flash]
0005071 D erase_sector result = 0 [flash]
[=                                                 ]   2%
0005071 D call erase_sector(a000) [flash]
0005092 D erase_sector result = 0 [flash]
[=                                                 ]   2%
0005093 D call erase_sector(b000) [flash]
0005113 D erase_sector result = 0 [flash]
[=                                                 ]   3%
0005114 D call erase_sector(c000) [flash]
0005134 D erase_sector result = 0 [flash]
[=                                                 ]   3%
0005135 D call erase_sector(d000) [flash]
0005155 D erase_sector result = 0 [flash]
[=                                                 ]   3%
0005156 D call erase_sector(e000) [flash]
0005176 D erase_sector result = 0 [flash]
[=                                                 ]   3%
0005177 D call erase_sector(f000) [flash]
0005197 D erase_sector result = 0 [flash]
[=                                                 ]   3%
0005198 D call erase_sector(10000) [flash]
0005218 D erase_sector result = 0 [flash]
[=                                                 ]   4%
0005219 D call erase_sector(11000) [flash]
0005239 D erase_sector result = 0 [flash]
[=                                                 ]   4%
0005240 D call erase_sector(12000) [flash]
0005260 D erase_sector result = 0 [flash]
[==                                                ]   4%
0005261 D call erase_sector(13000) [flash]
0005281 D erase_sector result = 0 [flash]
[==                                                ]   4%
0005282 D call erase_sector(14000) [flash]
0005302 D erase_sector result = 0 [flash]
[==                                                ]   5%
0005303 D call erase_sector(15000) [flash]
0005323 D erase_sector result = 0 [flash]
[==                                                ]   5%
0005324 D call erase_sector(16000) [flash]
0005344 D erase_sector result = 0 [flash]
[==                                                ]   5%
0005345 D call erase_sector(17000) [flash]
0005365 D erase_sector result = 0 [flash]
[==                                                ]   5%
0005366 D call erase_sector(18000) [flash]
0005386 D erase_sector result = 0 [flash]
[==                                                ]   5%
0005387 D call erase_sector(19000) [flash]
0005407 D erase_sector result = 0 [flash]
[==                                                ]   6%
0005408 D call erase_sector(1a000) [flash]
0005428 D erase_sector result = 0 [flash]
[==                                                ]   6%
0005429 D call erase_sector(1b000) [flash]
0005449 D erase_sector result = 0 [flash]
[===                                               ]   6%
0005450 D call erase_sector(1c000) [flash]
0005470 D erase_sector result = 0 [flash]
[===                                               ]   6%
0005471 D call erase_sector(1d000) [flash]
0005491 D erase_sector result = 0 [flash]
[===                                               ]   7%
0005491 D call erase_sector(1e000) [flash]
0005512 D erase_sector result = 0 [flash]
[===                                               ]   7%
0005513 D call erase_sector(1f000) [flash]
0005533 D erase_sector result = 0 [flash]
[===                                               ]   7%
0005534 D call erase_sector(20000) [flash]
0005554 D erase_sector result = 0 [flash]
[===                                               ]   7%
0005555 D call erase_sector(21000) [flash]
0005575 D erase_sector result = 0 [flash]
[===                                               ]   7%
0005576 D call erase_sector(22000) [flash]
0005596 D erase_sector result = 0 [flash]
[===                                               ]   8%
0005597 D call erase_sector(23000) [flash]
0005617 D erase_sector result = 0 [flash]
[===                                               ]   8%
0005618 D call erase_sector(24000) [flash]
0005638 D erase_sector result = 0 [flash]
[====                                              ]   8%
0005639 D call erase_sector(25000) [flash]
0005659 D erase_sector result = 0 [flash]
[====                                              ]   8%
0005660 D call erase_sector(26000) [flash]
0005680 D erase_sector result = 0 [flash]
[====                                              ]   8%
0005681 D call erase_sector(27000) [flash]
0005701 D erase_sector result = 0 [flash]
[====                                              ]   9%
0005702 D call erase_sector(28000) [flash]
0005722 D erase_sector result = 0 [flash]
[====                                              ]   9%
0005723 D call erase_sector(29000) [flash]
0005743 D erase_sector result = 0 [flash]
[====                                              ]   9%
0005743 D call erase_sector(2a000) [flash]
0005764 D erase_sector result = 0 [flash]
[====                                              ]   9%
0005765 D call erase_sector(2b000) [flash]
0005785 D erase_sector result = 0 [flash]
[====                                              ]  10%
0005786 D call erase_sector(2c000) [flash]
0005806 D erase_sector result = 0 [flash]
[====                                              ]  10%
0005806 D call erase_sector(2d000) [flash]
0005827 D erase_sector result = 0 [flash]
[====                                              ]  10%
0005827 D call erase_sector(2e000) [flash]
0005848 D erase_sector result = 0 [flash]
[=====                                             ]  10%
0005849 D call erase_sector(2f000) [flash]
0005869 D erase_sector result = 0 [flash]
[=====                                             ]  10%
0005870 D call erase_sector(30000) [flash]
0005890 D erase_sector result = 0 [flash]
[=====                                             ]  11%
0005890 D call erase_sector(31000) [flash]
0005911 D erase_sector result = 0 [flash]
[=====                                             ]  11%
0005911 D call erase_sector(32000) [flash]
0005932 D erase_sector result = 0 [flash]
[=====                                             ]  11%
0005933 D call erase_sector(33000) [flash]
0005953 D erase_sector result = 0 [flash]
[=====                                             ]  11%
0005954 D call erase_sector(34000) [flash]
0005974 D erase_sector result = 0 [flash]
[=====                                             ]  11%
0005975 D call erase_sector(35000) [flash]
0005995 D erase_sector result = 0 [flash]
[=====                                             ]  12%
0005996 D call erase_sector(36000) [flash]
0006016 D erase_sector result = 0 [flash]
[=====                                             ]  12%
0006017 D call erase_sector(37000) [flash]
0006037 D erase_sector result = 0 [flash]
[======                                            ]  12%
0006038 D call erase_sector(38000) [flash]
0006058 D erase_sector result = 0 [flash]
[======                                            ]  12%
0006059 D call erase_sector(39000) [flash]
0006079 D erase_sector result = 0 [flash]
[======                                            ]  13%
0006080 D call erase_sector(3a000) [flash]
0006100 D erase_sector result = 0 [flash]
[======                                            ]  13%
0006101 D call erase_sector(3b000) [flash]
0006121 D erase_sector result = 0 [flash]
[======                                            ]  13%
0006122 D call erase_sector(3c000) [flash]
0006142 D erase_sector result = 0 [flash]
[======                                            ]  13%
0006143 D call erase_sector(3d000) [flash]
0006163 D erase_sector result = 0 [flash]
[======                                            ]  13%
0006164 D call erase_sector(3e000) [flash]
0006184 D erase_sector result = 0 [flash]
[======                                            ]  14%
0006185 D call erase_sector(3f000) [flash]
0006205 D erase_sector result = 0 [flash]
[======                                            ]  14%
0006206 D call erase_sector(40000) [flash]
0006226 D erase_sector result = 0 [flash]
[=======                                           ]  14%
0006227 D call erase_sector(41000) [flash]
0006247 D erase_sector result = 0 [flash]
[=======                                           ]  14%
0006248 D call erase_sector(42000) [flash]
0006268 D erase_sector result = 0 [flash]
[=======                                           ]  15%
0006269 D call erase_sector(43000) [flash]
0006289 D erase_sector result = 0 [flash]
[=======                                           ]  15%
0006290 D call erase_sector(44000) [flash]
0006310 D erase_sector result = 0 [flash]
[=======                                           ]  15%
0006311 D call erase_sector(45000) [flash]
0006331 D erase_sector result = 0 [flash]
[=======                                           ]  15%
0006332 D call erase_sector(46000) [flash]
0006352 D erase_sector result = 0 [flash]
[=======                                           ]  15%
0006353 D call erase_sector(78000) [flash]
0006373 D erase_sector result = 0 [flash]
[=======                                           ]  16%
0006374 D call erase_sector(79000) [flash]
0006394 D erase_sector result = 0 [flash]
[=======                                           ]  16%
0006395 D call erase_sector(7a000) [flash]
0006415 D erase_sector result = 0 [flash]
[========                                          ]  16%
0006416 D call erase_sector(7b000) [flash]
0006436 D erase_sector result = 0 [flash]
[========                                          ]  16%
0006437 D call erase_sector(7c000) [flash]
0006457 D erase_sector result = 0 [flash]
[========                                          ]  16%
0006458 D call erase_sector(7d000) [flash]
0006478 D erase_sector result = 0 [flash]
[========                                          ]  17%
0006479 D call erase_sector(7e000) [flash]
0006499 D erase_sector result = 0 [flash]
[========                                          ]  17%
0006499 D call erase_sector(7f000) [flash]
0006520 D erase_sector result = 0 [flash]
[========                                          ]  17%
0006522 D algo call init(addr=0, clock=0, op=2) [flash]
0006547 D init result = 0 [flash]
0006769 D start_program_page_with_buffer(addr=0, len=1000, data=20002000) [flash]
[=========                                         ]  18%
0007014 D start_program_page_with_buffer(addr=1000, len=1000, data=20003000) [flash]
[=========                                         ]  19%
0007258 D start_program_page_with_buffer(addr=2000, len=1000, data=20002000) [flash]
[==========                                        ]  20%
0007503 D start_program_page_with_buffer(addr=3000, len=1000, data=20003000) [flash]
[==========                                        ]  21%
0007747 D start_program_page_with_buffer(addr=4000, len=1000, data=20002000) [flash]
[===========                                       ]  22%
0007992 D start_program_page_with_buffer(addr=5000, len=1000, data=20003000) [flash]
[===========                                       ]  23%
0008236 D start_program_page_with_buffer(addr=6000, len=1000, data=20002000) [flash]
[============                                      ]  24%
0008480 D start_program_page_with_buffer(addr=7000, len=1000, data=20003000) [flash]
[============                                      ]  26%
0008727 D start_program_page_with_buffer(addr=8000, len=1000, data=20002000) [flash]
[=============                                     ]  27%
0008978 D start_program_page_with_buffer(addr=9000, len=1000, data=20003000) [flash]
[=============                                     ]  28%
0009223 D start_program_page_with_buffer(addr=a000, len=1000, data=20002000) [flash]
[==============                                    ]  29%
0009468 D start_program_page_with_buffer(addr=b000, len=1000, data=20003000) [flash]
[==============                                    ]  30%
0009712 D start_program_page_with_buffer(addr=c000, len=1000, data=20002000) [flash]
[===============                                   ]  31%
0009957 D start_program_page_with_buffer(addr=d000, len=1000, data=20003000) [flash]
[===============                                   ]  32%
0010202 D start_program_page_with_buffer(addr=e000, len=1000, data=20002000) [flash]
[================                                  ]  33%
0010447 D start_program_page_with_buffer(addr=f000, len=1000, data=20003000) [flash]
[================                                  ]  34%
0010692 D start_program_page_with_buffer(addr=10000, len=1000, data=20002000) [flash]
[=================                                 ]  35%
0010940 D start_program_page_with_buffer(addr=11000, len=1000, data=20003000) [flash]
[==================                                ]  36%
0011188 D start_program_page_with_buffer(addr=12000, len=1000, data=20002000) [flash]
[==================                                ]  37%
0011433 D start_program_page_with_buffer(addr=13000, len=1000, data=20003000) [flash]
[===================                               ]  38%
0011677 D start_program_page_with_buffer(addr=14000, len=1000, data=20002000) [flash]
[===================                               ]  39%
0011921 D start_program_page_with_buffer(addr=15000, len=1000, data=20003000) [flash]
[====================                              ]  40%
0012166 D start_program_page_with_buffer(addr=16000, len=1000, data=20002000) [flash]
[====================                              ]  41%
0012411 D start_program_page_with_buffer(addr=17000, len=1000, data=20003000) [flash]
[=====================                             ]  42%
0012656 D start_program_page_with_buffer(addr=18000, len=1000, data=20002000) [flash]
[=====================                             ]  43%
0012901 D start_program_page_with_buffer(addr=19000, len=1000, data=20003000) [flash]
[======================                            ]  44%
0013148 D start_program_page_with_buffer(addr=1a000, len=1000, data=20002000) [flash]
[======================                            ]  45%
0013393 D start_program_page_with_buffer(addr=1b000, len=1000, data=20003000) [flash]
[=======================                           ]  46%
0013638 D start_program_page_with_buffer(addr=1c000, len=1000, data=20002000) [flash]
[=======================                           ]  48%
0013883 D start_program_page_with_buffer(addr=1d000, len=1000, data=20003000) [flash]
[========================                          ]  49%
0014128 D start_program_page_with_buffer(addr=1e000, len=1000, data=20002000) [flash]
[========================                          ]  50%
0014373 D start_program_page_with_buffer(addr=1f000, len=1000, data=20003000) [flash]
[=========================                         ]  51%
0014617 D start_program_page_with_buffer(addr=20000, len=1000, data=20002000) [flash]
[=========================                         ]  52%
0014862 D start_program_page_with_buffer(addr=21000, len=1000, data=20003000) [flash]
[==========================                        ]  53%
0015107 D start_program_page_with_buffer(addr=22000, len=1000, data=20002000) [flash]
[==========================                        ]  54%
0015353 D start_program_page_with_buffer(addr=23000, len=1000, data=20003000) [flash]
[===========================                       ]  55%
0015598 D start_program_page_with_buffer(addr=24000, len=1000, data=20002000) [flash]
[===========================                       ]  56%
0015842 D start_program_page_with_buffer(addr=25000, len=1000, data=20003000) [flash]
[============================                      ]  57%
0016086 D start_program_page_with_buffer(addr=26000, len=1000, data=20002000) [flash]
[=============================                     ]  58%
0016330 D start_program_page_with_buffer(addr=27000, len=1000, data=20003000) [flash]
[=============================                     ]  59%
0016574 D start_program_page_with_buffer(addr=28000, len=1000, data=20002000) [flash]
[==============================                    ]  60%
0016819 D start_program_page_with_buffer(addr=29000, len=1000, data=20003000) [flash]
[==============================                    ]  61%
0017063 D start_program_page_with_buffer(addr=2a000, len=1000, data=20002000) [flash]
[===============================                   ]  62%
0017307 D start_program_page_with_buffer(addr=2b000, len=1000, data=20003000) [flash]
[===============================                   ]  63%
0017553 D start_program_page_with_buffer(addr=2c000, len=1000, data=20002000) [flash]
[================================                  ]  64%
0017797 D start_program_page_with_buffer(addr=2d000, len=1000, data=20003000) [flash]
[================================                  ]  65%
0018041 D start_program_page_with_buffer(addr=2e000, len=1000, data=20002000) [flash]
[=================================                 ]  66%
0018285 D start_program_page_with_buffer(addr=2f000, len=1000, data=20003000) [flash]
[=================================                 ]  67%
0018529 D start_program_page_with_buffer(addr=30000, len=1000, data=20002000) [flash]
[==================================                ]  69%
0018773 D start_program_page_with_buffer(addr=31000, len=1000, data=20003000) [flash]
[==================================                ]  70%
0019017 D start_program_page_with_buffer(addr=32000, len=1000, data=20002000) [flash]
[===================================               ]  71%
0019262 D start_program_page_with_buffer(addr=33000, len=1000, data=20003000) [flash]
[===================================               ]  72%
0019506 D start_program_page_with_buffer(addr=34000, len=1000, data=20002000) [flash]
[====================================              ]  73%
0019753 D start_program_page_with_buffer(addr=35000, len=1000, data=20003000) [flash]
[====================================              ]  74%
0019997 D start_program_page_with_buffer(addr=36000, len=1000, data=20002000) [flash]
[=====================================             ]  75%
0020242 D start_program_page_with_buffer(addr=37000, len=1000, data=20003000) [flash]
[=====================================             ]  76%
0020487 D start_program_page_with_buffer(addr=38000, len=1000, data=20002000) [flash]
[======================================            ]  77%
0020732 D start_program_page_with_buffer(addr=39000, len=1000, data=20003000) [flash]
[======================================            ]  78%
0020977 D start_program_page_with_buffer(addr=3a000, len=1000, data=20002000) [flash]
[=======================================           ]  79%
0021222 D start_program_page_with_buffer(addr=3b000, len=1000, data=20003000) [flash]
[========================================          ]  80%
0021467 D start_program_page_with_buffer(addr=3c000, len=1000, data=20002000) [flash]
[========================================          ]  81%
0021712 D start_program_page_with_buffer(addr=3d000, len=1000, data=20003000) [flash]
[=========================================         ]  82%
0021960 D start_program_page_with_buffer(addr=3e000, len=1000, data=20002000) [flash]
[=========================================         ]  83%
0022205 D start_program_page_with_buffer(addr=3f000, len=1000, data=20003000) [flash]
[==========================================        ]  84%
0022450 D start_program_page_with_buffer(addr=40000, len=1000, data=20002000) [flash]
[==========================================        ]  85%
0022694 D start_program_page_with_buffer(addr=41000, len=1000, data=20003000) [flash]
[===========================================       ]  86%
0022938 D start_program_page_with_buffer(addr=42000, len=1000, data=20002000) [flash]
[===========================================       ]  87%
0023183 D start_program_page_with_buffer(addr=43000, len=1000, data=20003000) [flash]
[============================================      ]  88%
0023427 D start_program_page_with_buffer(addr=44000, len=1000, data=20002000) [flash]
[============================================      ]  90%
0023671 D start_program_page_with_buffer(addr=45000, len=1000, data=20003000) [flash]
[=============================================     ]  91%
0023916 D start_program_page_with_buffer(addr=46000, len=1000, data=20002000) [flash]
[=============================================     ]  92%
0024162 D start_program_page_with_buffer(addr=78000, len=1000, data=20003000) [flash]
[==============================================    ]  93%
0024412 D start_program_page_with_buffer(addr=79000, len=1000, data=20002000) [flash]
[==============================================    ]  94%
0024658 D start_program_page_with_buffer(addr=7a000, len=1000, data=20003000) [flash]
[===============================================   ]  95%
0024902 D start_program_page_with_buffer(addr=7b000, len=1000, data=20002000) [flash]
[===============================================   ]  96%
0025147 D start_program_page_with_buffer(addr=7c000, len=1000, data=20003000) [flash]
[================================================  ]  97%
0025391 D start_program_page_with_buffer(addr=7d000, len=1000, data=20002000) [flash]
[================================================  ]  98%
0025636 D start_program_page_with_buffer(addr=7e000, len=1000, data=20003000) [flash]
[================================================= ]  99%
0025881 D start_program_page_with_buffer(addr=7f000, len=1000, data=20002000) [flash]
[================================================= ] 100%
0026104 D algo init and load to 0x20000000 [flash]
0026245 D algo call init(addr=268439552, clock=0, op=3) [flash]
0026271 D init result = 0 [flash]
0026282 D call compute crc(20002000, 1) [flash]
[================================================= ] 100%
0026307 D algo call init(addr=268439552, clock=0, op=1) [flash]
0026332 D init result = 0 [flash]
0026333 D call erase_sector(10001000) [flash]
0026355 D erase_sector result = 0 [flash]
[================================================= ] 100%
0026358 D algo call init(addr=268439552, clock=0, op=2) [flash]
0026391 D init result = 0 [flash]
0026447 D start_program_page_with_buffer(addr=10001000, len=400, data=20002000) [flash]
[==================================================] 100%
0026626 I Erased 324608 bytes (80 sectors), programmed 324608 bytes (80 pages), skipped 0 bytes (0 pages) at 14.32 kB/s [loader]

pyocd & 10M
orangepi@orangepizero2w:~$ pyocd flash -t nrf52 -f 10M -Lpyocd.flash.flash.trace=debug firmware/xxx.hex
0002932 I Loading /home/orangepi/firmware/xxx.hex [load_cmd]
0004388 D algo init and load to 0x20000000 [flash]
0004524 D algo call init(addr=0, clock=0, op=3) [flash]
0004545 D init result = 0 [flash]
0004563 D call compute crc(20002000, 4f) [flash]
[                                                  ]   0%
0004677 D algo call init(addr=0, clock=0, op=1) [flash]
0004698 D init result = 0 [flash]
0004699 D call erase_sector(0) [flash]
0004717 D erase_sector result = 0 [flash]
[                                                  ]   0%
0004718 D call erase_sector(1000) [flash]
0004736 D erase_sector result = 0 [flash]
[                                                  ]   0%
0004737 D call erase_sector(2000) [flash]
0004755 D erase_sector result = 0 [flash]
[                                                  ]   1%
0004756 D call erase_sector(3000) [flash]
0004774 D erase_sector result = 0 [flash]
[                                                  ]   1%
0004775 D call erase_sector(4000) [flash]
0004793 D erase_sector result = 0 [flash]
[                                                  ]   1%
0004794 D call erase_sector(5000) [flash]
0004812 D erase_sector result = 0 [flash]
[                                                  ]   1%
0004813 D call erase_sector(6000) [flash]
0004831 D erase_sector result = 0 [flash]
[                                                  ]   2%
0004832 D call erase_sector(7000) [flash]
0004850 D erase_sector result = 0 [flash]
[                                                  ]   2%
0004851 D call erase_sector(8000) [flash]
0004869 D erase_sector result = 0 [flash]
[                                                  ]   2%
0004870 D call erase_sector(9000) [flash]
0004888 D erase_sector result = 0 [flash]
[=                                                 ]   2%
0004889 D call erase_sector(a000) [flash]
0004907 D erase_sector result = 0 [flash]
[=                                                 ]   2%
0004908 D call erase_sector(b000) [flash]
0004926 D erase_sector result = 0 [flash]
[=                                                 ]   3%
0004927 D call erase_sector(c000) [flash]
0004945 D erase_sector result = 0 [flash]
[=                                                 ]   3%
0004946 D call erase_sector(d000) [flash]
0004964 D erase_sector result = 0 [flash]
[=                                                 ]   3%
0004965 D call erase_sector(e000) [flash]
0004983 D erase_sector result = 0 [flash]
[=                                                 ]   3%
0004984 D call erase_sector(f000) [flash]
0005002 D erase_sector result = 0 [flash]
[=                                                 ]   3%
0005003 D call erase_sector(10000) [flash]
0005021 D erase_sector result = 0 [flash]
[=                                                 ]   4%
0005022 D call erase_sector(11000) [flash]
0005040 D erase_sector result = 0 [flash]
[=                                                 ]   4%
0005041 D call erase_sector(12000) [flash]
0005059 D erase_sector result = 0 [flash]
[==                                                ]   4%
0005060 D call erase_sector(13000) [flash]
0005078 D erase_sector result = 0 [flash]
[==                                                ]   4%
0005079 D call erase_sector(14000) [flash]
0005097 D erase_sector result = 0 [flash]
[==                                                ]   5%
0005098 D call erase_sector(15000) [flash]
0005116 D erase_sector result = 0 [flash]
[==                                                ]   5%
0005117 D call erase_sector(16000) [flash]
0005135 D erase_sector result = 0 [flash]
[==                                                ]   5%
0005136 D call erase_sector(17000) [flash]
0005154 D erase_sector result = 0 [flash]
[==                                                ]   5%
0005155 D call erase_sector(18000) [flash]
0005173 D erase_sector result = 0 [flash]
[==                                                ]   5%
0005174 D call erase_sector(19000) [flash]
0005192 D erase_sector result = 0 [flash]
[==                                                ]   6%
0005193 D call erase_sector(1a000) [flash]
0005211 D erase_sector result = 0 [flash]
[==                                                ]   6%
0005212 D call erase_sector(1b000) [flash]
0005230 D erase_sector result = 0 [flash]
[===                                               ]   6%
0005231 D call erase_sector(1c000) [flash]
0005249 D erase_sector result = 0 [flash]
[===                                               ]   6%
0005250 D call erase_sector(1d000) [flash]
0005268 D erase_sector result = 0 [flash]
[===                                               ]   7%
0005269 D call erase_sector(1e000) [flash]
0005287 D erase_sector result = 0 [flash]
[===                                               ]   7%
0005288 D call erase_sector(1f000) [flash]
0005306 D erase_sector result = 0 [flash]
[===                                               ]   7%
0005307 D call erase_sector(20000) [flash]
0005325 D erase_sector result = 0 [flash]
[===                                               ]   7%
0005326 D call erase_sector(21000) [flash]
0005344 D erase_sector result = 0 [flash]
[===                                               ]   7%
0005345 D call erase_sector(22000) [flash]
0005363 D erase_sector result = 0 [flash]
[===                                               ]   8%
0005364 D call erase_sector(23000) [flash]
0005382 D erase_sector result = 0 [flash]
[===                                               ]   8%
0005383 D call erase_sector(24000) [flash]
0005401 D erase_sector result = 0 [flash]
[====                                              ]   8%
0005402 D call erase_sector(25000) [flash]
0005420 D erase_sector result = 0 [flash]
[====                                              ]   8%
0005421 D call erase_sector(26000) [flash]
0005439 D erase_sector result = 0 [flash]
[====                                              ]   8%
0005440 D call erase_sector(27000) [flash]
0005458 D erase_sector result = 0 [flash]
[====                                              ]   9%
0005459 D call erase_sector(28000) [flash]
0005477 D erase_sector result = 0 [flash]
[====                                              ]   9%
0005478 D call erase_sector(29000) [flash]
0005496 D erase_sector result = 0 [flash]
[====                                              ]   9%
0005497 D call erase_sector(2a000) [flash]
0005515 D erase_sector result = 0 [flash]
[====                                              ]   9%
0005516 D call erase_sector(2b000) [flash]
0005534 D erase_sector result = 0 [flash]
[====                                              ]  10%
0005535 D call erase_sector(2c000) [flash]
0005553 D erase_sector result = 0 [flash]
[====                                              ]  10%
0005554 D call erase_sector(2d000) [flash]
0005572 D erase_sector result = 0 [flash]
[====                                              ]  10%
0005573 D call erase_sector(2e000) [flash]
0005591 D erase_sector result = 0 [flash]
[=====                                             ]  10%
0005592 D call erase_sector(2f000) [flash]
0005610 D erase_sector result = 0 [flash]
[=====                                             ]  10%
0005611 D call erase_sector(30000) [flash]
0005629 D erase_sector result = 0 [flash]
[=====                                             ]  11%
0005630 D call erase_sector(31000) [flash]
0005648 D erase_sector result = 0 [flash]
[=====                                             ]  11%
0005649 D call erase_sector(32000) [flash]
0005667 D erase_sector result = 0 [flash]
[=====                                             ]  11%
0005668 D call erase_sector(33000) [flash]
0005686 D erase_sector result = 0 [flash]
[=====                                             ]  11%
0005687 D call erase_sector(34000) [flash]
0005705 D erase_sector result = 0 [flash]
[=====                                             ]  11%
0005706 D call erase_sector(35000) [flash]
0005724 D erase_sector result = 0 [flash]
[=====                                             ]  12%
0005725 D call erase_sector(36000) [flash]
0005743 D erase_sector result = 0 [flash]
[=====                                             ]  12%
0005744 D call erase_sector(37000) [flash]
0005762 D erase_sector result = 0 [flash]
[======                                            ]  12%
0005763 D call erase_sector(38000) [flash]
0005781 D erase_sector result = 0 [flash]
[======                                            ]  12%
0005782 D call erase_sector(39000) [flash]
0005800 D erase_sector result = 0 [flash]
[======                                            ]  13%
0005801 D call erase_sector(3a000) [flash]
0005819 D erase_sector result = 0 [flash]
[======                                            ]  13%
0005820 D call erase_sector(3b000) [flash]
0005838 D erase_sector result = 0 [flash]
[======                                            ]  13%
0005839 D call erase_sector(3c000) [flash]
0005857 D erase_sector result = 0 [flash]
[======                                            ]  13%
0005858 D call erase_sector(3d000) [flash]
0005876 D erase_sector result = 0 [flash]
[======                                            ]  13%
0005877 D call erase_sector(3e000) [flash]
0005895 D erase_sector result = 0 [flash]
[======                                            ]  14%
0005896 D call erase_sector(3f000) [flash]
0005914 D erase_sector result = 0 [flash]
[======                                            ]  14%
0005915 D call erase_sector(40000) [flash]
0005933 D erase_sector result = 0 [flash]
[=======                                           ]  14%
0005934 D call erase_sector(41000) [flash]
0005952 D erase_sector result = 0 [flash]
[=======                                           ]  14%
0005953 D call erase_sector(42000) [flash]
0005971 D erase_sector result = 0 [flash]
[=======                                           ]  15%
0005972 D call erase_sector(43000) [flash]
0005990 D erase_sector result = 0 [flash]
[=======                                           ]  15%
0005991 D call erase_sector(44000) [flash]
0006009 D erase_sector result = 0 [flash]
[=======                                           ]  15%
0006010 D call erase_sector(45000) [flash]
0006028 D erase_sector result = 0 [flash]
[=======                                           ]  15%
0006029 D call erase_sector(46000) [flash]
0006047 D erase_sector result = 0 [flash]
[=======                                           ]  15%
0006048 D call erase_sector(78000) [flash]
0006066 D erase_sector result = 0 [flash]
[=======                                           ]  16%
0006067 D call erase_sector(79000) [flash]
0006085 D erase_sector result = 0 [flash]
[=======                                           ]  16%
0006086 D call erase_sector(7a000) [flash]
0006104 D erase_sector result = 0 [flash]
[========                                          ]  16%
0006105 D call erase_sector(7b000) [flash]
0006123 D erase_sector result = 0 [flash]
[========                                          ]  16%
0006124 D call erase_sector(7c000) [flash]
0006142 D erase_sector result = 0 [flash]
[========                                          ]  16%
0006143 D call erase_sector(7d000) [flash]
0006161 D erase_sector result = 0 [flash]
[========                                          ]  17%
0006162 D call erase_sector(7e000) [flash]
0006180 D erase_sector result = 0 [flash]
[========                                          ]  17%
0006181 D call erase_sector(7f000) [flash]
0006199 D erase_sector result = 0 [flash]
[========                                          ]  17%
0006201 D algo call init(addr=0, clock=0, op=2) [flash]
0006222 D init result = 0 [flash]
0006372 D start_program_page_with_buffer(addr=0, len=1000, data=20002000) [flash]
[=========                                         ]  18%
0006540 D start_program_page_with_buffer(addr=1000, len=1000, data=20003000) [flash]
[=========                                         ]  19%
0006707 D start_program_page_with_buffer(addr=2000, len=1000, data=20002000) [flash]
[==========                                        ]  20%
0006874 D start_program_page_with_buffer(addr=3000, len=1000, data=20003000) [flash]
[==========                                        ]  21%
0007041 D start_program_page_with_buffer(addr=4000, len=1000, data=20002000) [flash]
[===========                                       ]  22%
0007209 D start_program_page_with_buffer(addr=5000, len=1000, data=20003000) [flash]
[===========                                       ]  23%
0007376 D start_program_page_with_buffer(addr=6000, len=1000, data=20002000) [flash]
[============                                      ]  24%
0007543 D start_program_page_with_buffer(addr=7000, len=1000, data=20003000) [flash]
[============                                      ]  26%
0007710 D start_program_page_with_buffer(addr=8000, len=1000, data=20002000) [flash]
[=============                                     ]  27%
0007877 D start_program_page_with_buffer(addr=9000, len=1000, data=20003000) [flash]
[=============                                     ]  28%
0008046 D start_program_page_with_buffer(addr=a000, len=1000, data=20002000) [flash]
[==============                                    ]  29%
0008220 D start_program_page_with_buffer(addr=b000, len=1000, data=20003000) [flash]
[==============                                    ]  30%
0008387 D start_program_page_with_buffer(addr=c000, len=1000, data=20002000) [flash]
[===============                                   ]  31%
0008554 D start_program_page_with_buffer(addr=d000, len=1000, data=20003000) [flash]
[===============                                   ]  32%
0008721 D start_program_page_with_buffer(addr=e000, len=1000, data=20002000) [flash]
[================                                  ]  33%
0008888 D start_program_page_with_buffer(addr=f000, len=1000, data=20003000) [flash]
[================                                  ]  34%
0009055 D start_program_page_with_buffer(addr=10000, len=1000, data=20002000) [flash]
[=================                                 ]  35%
0009222 D start_program_page_with_buffer(addr=11000, len=1000, data=20003000) [flash]
[==================                                ]  36%
0009389 D start_program_page_with_buffer(addr=12000, len=1000, data=20002000) [flash]
[==================                                ]  37%
0009556 D start_program_page_with_buffer(addr=13000, len=1000, data=20003000) [flash]
[===================                               ]  38%
0009723 D start_program_page_with_buffer(addr=14000, len=1000, data=20002000) [flash]
[===================                               ]  39%
0009890 D start_program_page_with_buffer(addr=15000, len=1000, data=20003000) [flash]
[====================                              ]  40%
0010057 D start_program_page_with_buffer(addr=16000, len=1000, data=20002000) [flash]
[====================                              ]  41%
0010226 D start_program_page_with_buffer(addr=17000, len=1000, data=20003000) [flash]
[=====================                             ]  42%
0010400 D start_program_page_with_buffer(addr=18000, len=1000, data=20002000) [flash]
[=====================                             ]  43%
0010567 D start_program_page_with_buffer(addr=19000, len=1000, data=20003000) [flash]
[======================                            ]  44%
0010734 D start_program_page_with_buffer(addr=1a000, len=1000, data=20002000) [flash]
[======================                            ]  45%
0010901 D start_program_page_with_buffer(addr=1b000, len=1000, data=20003000) [flash]
[=======================                           ]  46%
0011068 D start_program_page_with_buffer(addr=1c000, len=1000, data=20002000) [flash]
[=======================                           ]  48%
0011235 D start_program_page_with_buffer(addr=1d000, len=1000, data=20003000) [flash]
[========================                          ]  49%
0011402 D start_program_page_with_buffer(addr=1e000, len=1000, data=20002000) [flash]
[========================                          ]  50%
0011569 D start_program_page_with_buffer(addr=1f000, len=1000, data=20003000) [flash]
[=========================                         ]  51%
0011736 D start_program_page_with_buffer(addr=20000, len=1000, data=20002000) [flash]
[=========================                         ]  52%
0011903 D start_program_page_with_buffer(addr=21000, len=1000, data=20003000) [flash]
[==========================                        ]  53%
0012070 D start_program_page_with_buffer(addr=22000, len=1000, data=20002000) [flash]
[==========================                        ]  54%
0012238 D start_program_page_with_buffer(addr=23000, len=1000, data=20003000) [flash]
[===========================                       ]  55%
0012410 D start_program_page_with_buffer(addr=24000, len=1000, data=20002000) [flash]
[===========================                       ]  56%
0012591 D start_program_page_with_buffer(addr=25000, len=1000, data=20003000) [flash]
[============================                      ]  57%
0012758 D start_program_page_with_buffer(addr=26000, len=1000, data=20002000) [flash]
[=============================                     ]  58%
0012925 D start_program_page_with_buffer(addr=27000, len=1000, data=20003000) [flash]
[=============================                     ]  59%
0013092 D start_program_page_with_buffer(addr=28000, len=1000, data=20002000) [flash]
[==============================                    ]  60%
0013259 D start_program_page_with_buffer(addr=29000, len=1000, data=20003000) [flash]
[==============================                    ]  61%
0013426 D start_program_page_with_buffer(addr=2a000, len=1000, data=20002000) [flash]
[===============================                   ]  62%
0013593 D start_program_page_with_buffer(addr=2b000, len=1000, data=20003000) [flash]
[===============================                   ]  63%
0013760 D start_program_page_with_buffer(addr=2c000, len=1000, data=20002000) [flash]
[================================                  ]  64%
0013927 D start_program_page_with_buffer(addr=2d000, len=1000, data=20003000) [flash]
[================================                  ]  65%
0014094 D start_program_page_with_buffer(addr=2e000, len=1000, data=20002000) [flash]
[=================================                 ]  66%
0014261 D start_program_page_with_buffer(addr=2f000, len=1000, data=20003000) [flash]
[=================================                 ]  67%
0014428 D start_program_page_with_buffer(addr=30000, len=1000, data=20002000) [flash]
[==================================                ]  69%
0014599 D start_program_page_with_buffer(addr=31000, len=1000, data=20003000) [flash]
[==================================                ]  70%
0014779 D start_program_page_with_buffer(addr=32000, len=1000, data=20002000) [flash]
[===================================               ]  71%
0014946 D start_program_page_with_buffer(addr=33000, len=1000, data=20003000) [flash]
[===================================               ]  72%
0015113 D start_program_page_with_buffer(addr=34000, len=1000, data=20002000) [flash]
[====================================              ]  73%
0015280 D start_program_page_with_buffer(addr=35000, len=1000, data=20003000) [flash]
[====================================              ]  74%
0015447 D start_program_page_with_buffer(addr=36000, len=1000, data=20002000) [flash]
[=====================================             ]  75%
0015614 D start_program_page_with_buffer(addr=37000, len=1000, data=20003000) [flash]
[=====================================             ]  76%
0015781 D start_program_page_with_buffer(addr=38000, len=1000, data=20002000) [flash]
[======================================            ]  77%
0015948 D start_program_page_with_buffer(addr=39000, len=1000, data=20003000) [flash]
[======================================            ]  78%
0016115 D start_program_page_with_buffer(addr=3a000, len=1000, data=20002000) [flash]
[=======================================           ]  79%
0016282 D start_program_page_with_buffer(addr=3b000, len=1000, data=20003000) [flash]
[========================================          ]  80%
0016449 D start_program_page_with_buffer(addr=3c000, len=1000, data=20002000) [flash]
[========================================          ]  81%
0016616 D start_program_page_with_buffer(addr=3d000, len=1000, data=20003000) [flash]
[=========================================         ]  82%
0016787 D start_program_page_with_buffer(addr=3e000, len=1000, data=20002000) [flash]
[=========================================         ]  83%
0016972 D start_program_page_with_buffer(addr=3f000, len=1000, data=20003000) [flash]
[==========================================        ]  84%
0017142 D start_program_page_with_buffer(addr=40000, len=1000, data=20002000) [flash]
[==========================================        ]  85%
0017310 D start_program_page_with_buffer(addr=41000, len=1000, data=20003000) [flash]
[===========================================       ]  86%
0017478 D start_program_page_with_buffer(addr=42000, len=1000, data=20002000) [flash]
[===========================================       ]  87%
0017645 D start_program_page_with_buffer(addr=43000, len=1000, data=20003000) [flash]
[============================================      ]  88%
0017812 D start_program_page_with_buffer(addr=44000, len=1000, data=20002000) [flash]
[============================================      ]  90%
0017980 D start_program_page_with_buffer(addr=45000, len=1000, data=20003000) [flash]
[=============================================     ]  91%
0018147 D start_program_page_with_buffer(addr=46000, len=1000, data=20002000) [flash]
[=============================================     ]  92%
0018314 D start_program_page_with_buffer(addr=78000, len=1000, data=20003000) [flash]
[==============================================    ]  93%
0018481 D start_program_page_with_buffer(addr=79000, len=1000, data=20002000) [flash]
[==============================================    ]  94%
0018648 D start_program_page_with_buffer(addr=7a000, len=1000, data=20003000) [flash]
[===============================================   ]  95%
0018815 D start_program_page_with_buffer(addr=7b000, len=1000, data=20002000) [flash]
[===============================================   ]  96%
0018985 D start_program_page_with_buffer(addr=7c000, len=1000, data=20003000) [flash]
[================================================  ]  97%
0019171 D start_program_page_with_buffer(addr=7d000, len=1000, data=20002000) [flash]
[================================================  ]  98%
0019340 D start_program_page_with_buffer(addr=7e000, len=1000, data=20003000) [flash]
[================================================= ]  99%
0019507 D start_program_page_with_buffer(addr=7f000, len=1000, data=20002000) [flash]
[================================================= ] 100%
0019723 D algo init and load to 0x20000000 [flash]
0019859 D algo call init(addr=268439552, clock=0, op=3) [flash]
0019880 D init result = 0 [flash]
0019888 D call compute crc(20002000, 1) [flash]
[================================================= ] 100%
0019909 D algo call init(addr=268439552, clock=0, op=1) [flash]
0019930 D init result = 0 [flash]
0019931 D call erase_sector(10001000) [flash]
0019949 D erase_sector result = 0 [flash]
[================================================= ] 100%
0019951 D algo call init(addr=268439552, clock=0, op=2) [flash]
0019972 D init result = 0 [flash]
0020010 D start_program_page_with_buffer(addr=10001000, len=400, data=20002000) [flash]
[==================================================] 100%
0020173 I Erased 324608 bytes (80 sectors), programmed 324608 bytes (80 pages), skipped 0 bytes (0 pages) at 20.05 kB/s [loader]

probe-rs & 10M
orangepi@orangepizero2w:~$ ./probe-rs download --chip nRF52832_xxAA --binary-format hex --speed 10000 firmware/xxx.hex
      Erasing ✔ 100% [####################] 320.00 KiB @  33.09 KiB/s (took 10s)
  Programming ✔ 100% [####################] 316.00 KiB @   6.96 KiB/s (took 45s)
     Finished in 46.64s

orangepi@orangepizero2w:~$ ./probe-rs benchmark --chip nRF52832_xxAA --speed 10000 --address 0x20000000
Probe: Probe type CMSIS-DAP, debug interface not specified, target chip nRF52832_xxAA

Test: Speed 10000, Word size 32bit, Data length 4 bytes, Number of iterations 5
Results: Read: 1000.77 bytes/s Std Dev 0.28, Write: 1825022.80 bytes/s Std Dev 373185.10

Test: Speed 10000, Word size 32bit, Data length 32 bytes, Number of iterations 5
Results: Read: 4000.24 bytes/s Std Dev 0.23, Write: 4000.25 bytes/s Std Dev 0.54

Test: Speed 10000, Word size 32bit, Data length 128 bytes, Number of iterations 5
Results: Read: 8000.17 bytes/s Std Dev 0.51, Write: 7996.53 bytes/s Std Dev 8.12

Test: Speed 10000, Word size 32bit, Data length 2048 bytes, Number of iterations 5
Results: Read: 12799.97 bytes/s Std Dev 0.03, Write: 12800.20 bytes/s Std Dev 0.14

Test: Speed 10000, Word size 32bit, Data length 32768 bytes, Number of iterations 5
Results: Read: 12799.94 bytes/s Std Dev 0.01, Write: 12800.40 bytes/s Std Dev 0.37

probe-rs & 10M & 5700G
PS C:\Users\xxx\Downloads> C:\Users\xxx\Documents\GitHub\probe-rs\target\release\probe-rs.exe download --chip nRF52832_xxAA --binary-format hex  --speed 10000 "C:\Users\yekai\Downloads\xxx.hex"
      Erasing ✔ 100% [####################] 320.00 KiB @ 594.60 KiB/s (took 1s)
  Programming ✔ 100% [####################] 316.00 KiB @  48.62 KiB/s (took 6s)
     Finished in 6.63s

PS C:\Users\xxx\Downloads> C:\Users\xxx\Documents\GitHub\probe-rs\target\release\probe-rs.exe benchmark --chip nRF52832_xxAA --speed 10000 --address 0x20000000
Probe: Probe type CMSIS-DAP, debug interface not specified, target chip nRF52832_xxAA

Test: Speed 10000, Word size 32bit, Data length 4 bytes, Number of iterations 5
Results: Read: 24898.10 bytes/s Std Dev 1592.75, Write: 4477871.15 bytes/s Std Dev 2261876.30

Test: Speed 10000, Word size 32bit, Data length 32 bytes, Number of iterations 5
Results: Read: 98782.89 bytes/s Std Dev 7059.92, Write: 97373.26 bytes/s Std Dev 8019.72

Test: Speed 10000, Word size 32bit, Data length 128 bytes, Number of iterations 5
Results: Read: 138975.49 bytes/s Std Dev 8681.10, Write: 139316.00 bytes/s Std Dev 7325.05

Test: Speed 10000, Word size 32bit, Data length 2048 bytes, Number of iterations 5
Results: Read: 173595.66 bytes/s Std Dev 1168.27, Write: 166349.41 bytes/s Std Dev 2633.06

Test: Speed 10000, Word size 32bit, Data length 32768 bytes, Number of iterations 5
Results: Read: 172650.57 bytes/s Std Dev 449.05, Write: 165248.14 bytes/s Std Dev 334.75

I believe the speed discrepancy between the two systems points to logging to an SD card potentially being the culprit? What are the setups of the two systems?

kioxia 32g blue microsd card on orangpi and TiPlus5000 nvme on windows machine. If sd card cause this, why pyocd can have a better performance than probe-rs? Do pyocd cached the fw into ram and probe-rs read it every time before write page?

We always log to a file on disk :) That sloes things down considerably with an SD card. can you try point the log file to a tempfs in RAM with --log-file? :)

I find that /tmp always be full on this system, and no improvement on downloading...I would try another system later.

I tried armbian and ubuntu and the result is quite the same. And /tmp would be filled after one time download...(my opi has only 1g ram and 512M /tmp)

<[summary]>log
orangepi@orangepizero2w:~$ python3 ./xxx/relay.py
orangepi@orangepizero2w:~$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  389M     0  389M   0% /dev
tmpfs          tmpfs      92M  1.9M   90M   3% /run
/dev/mmcblk0p1 ext4       57G  1.5G   55G   3% /
tmpfs          tmpfs     460M     0  460M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     460M     0  460M   0% /tmp
/dev/zram1     ext4       47M  1.2M   43M   3% /var/log
tmpfs          tmpfs      92M     0   92M   0% /run/user/1000
orangepi@orangepizero2w:~$ cp firmware/xxx.hex /tmp/xxx.hex
orangepi@orangepizero2w:~$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  389M     0  389M   0% /dev
tmpfs          tmpfs      92M  1.9M   90M   3% /run
/dev/mmcblk0p1 ext4       57G  1.5G   55G   3% /
tmpfs          tmpfs     460M     0  460M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     460M  852K  459M   1% /tmp
/dev/zram1     ext4       47M  1.2M   43M   3% /var/log
tmpfs          tmpfs      92M     0   92M   0% /run/user/1000
orangepi@orangepizero2w:~$ sudo ./probe-rs download --chip nRF52832_xxAA --binary-format hex --speed 10000 --log-file=/tmp/1.log /tmp/xxx.hex
[sudo] password for orangepi:
      Erasing ✔ 100% [####################] 320.00 KiB @  27.47 KiB/s (took 12s)
  Programming ✔ 100% [####################] 316.00 KiB @   6.24 KiB/s (took 51s)                                                                                Finished in 52.07s
orangepi@orangepizero2w:~$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  389M     0  389M   0% /dev
tmpfs          tmpfs      92M  1.9M   90M   3% /run
/dev/mmcblk0p1 ext4       57G  1.5G   55G   3% /
tmpfs          tmpfs     460M     0  460M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     460M  460M     0 100% /tmp
/dev/zram1     ext4       47M  1.2M   43M   3% /var/log
tmpfs          tmpfs      92M     0   92M   0% /run/user/1000
orangepi@orangepizero2w:~$

I dont see how you put the logfile somewhere else than the SD card?

This would not take effect? I see the log is generated here.

authors: Yatekii kaidegit zh522130

repo: probe-rs/probe-rs


text:
espusbjtag: use nusb get_descriptor() instead of doing a manual control request.

WARNING: I haven't tested it on real hardware, please test before merge! :pray:

I've fixed the debug log instead, hopefully it works now!

source: gharchive/pull-request

license_type: permissive

license_source: github-api


text:
clarify what is meant by "background"?

Hi @itaditya.
I see this bot is "finds background of github users" but I'm not sure what that means. Can you clarify?

Hi @zeke by background I meant if the user has been hostile in the past. To check that, I run a sentiment analyzer over their public comments. If these public comments are toxic, the maintainers then decide what to do about that.

Cool! I would recommend updating the readme to make that more clear.

Thanks for the feeback @zeke. I'll work on it ASAP

source: gharchive/issue

authors: itaditya zeke

repo: probot/background-check

license: MIT


text:
Disabling "sign-off" for members doesn't work, instead requires GPG signatures

Installed DCO bot for the cyrus projects (https://github.com/cyrusimap/cyrus-sasl and https://github.com/cyrusimap/cyrus-imapd).
Set up the bit so that members should be ignored:
https://github.com/cyrusimap/cyrus-sasl/commit/647f5a46c259afee5bc68c2687bd7715bba50e91
for example.  Instead, members must now gpg sign commits.  That seems to be the opposite result of what was intended?

I can kind of understand "organisation members get a special privilege (not having to sign-off), but to get it, they must prove they're organisation members (with GPG)", but:
If a non-organisation member submits a PR containing commits that falsely claim to be authored by an organisation member:

the PR submitter/commit author mismatch will already stand out at code review, regardless of the DCO check
reviewers can trivially verify the authenticity by just asking the org-member alleged author about it over another channel
the submitter could have trivially succeeded at the DCO check anyway, by making the same fraudulent claim in a Signed-off-by: line? (I'm not certain, I haven't poked this hard.)

On the other hand, if a non-organisation member submits a PR and isn't trying to frame an organisation member specifically, then we have no way to confirm whether or not they're actually trying to frame someone else instead.  The whole thing is already premised on a trust that the author is who the submitter says they are, which is fine actually; but it seems like if a GPG signature should be required anywhere, it's the "we have no idea who you are" case, not the "is an organisation member" case.
I guess if the whole project is already requiring GPG-signed commits, then the issue becomes academic.  But if the project isn't already requiring GPG-signed commits, it feels backwards to suddenly require it here.

+1

I think this should be configurable. I'd love to use this check, but organization membership (because it's governed by external contracts) will be enough to satisfy any legal issues. Ideally then, organization members shouldn't need to jump through extra hoops.
Having an enumeration instead of a boolean would allow people to configure it easily:
members_must_sign_off: "gpg" | "trailer" | "no"

authors: HalosGhost butler54 elliefm quanah

repo: probot/dco

license: ISC


text:
Allow different settings for pulls and issues. Add config 'limitPerRun'.

Hello, and thanks for the useful bot!
You recommended I make a PR, and I hope this makes the bot even better.
This PR does two things:

Closes #66: Feature Request: different stale settings for PRs and Issues

Most configs can be specified for just 'pulls' or 'issues' as overrides for the 'global' config values.
The config values for owner, repo, only, and logger all remain 'global' only.

Add config 'limitPerRun'

Limit per run is still capped at 30, but the config can now set it lower.
This will let me start chipping away at old issues at 1 per hour instead of getting a huge flood.

This should all be backward compatible, and examples for the new configs are added to the README.
~Unfortunately I was not able to easily find a way to test this out.~
~I have looked it over as carefully as I can, but if you can test it out or point me in the right direction I would really appreciate it!~

Updated with a unit test, and fixed some issues.

I'm planning to work with a friend this weekend to test things out on a real repo.

Hey @mezz, this is looking good! I won't have time to review closely until tomorrow or Saturday, but I like it at first glance.

Hi @bkeepers, do you have a chance to look this over?

Sorry @mezz, I have a milestone for work that's due this Tuesday, so I've been really busy. I'll check this out over the Thanksgiving holiday though.
/remind me to review this on friday

Hi @bkeepers, I am not in a rush at all but I will try to remind you of this occasionally :)
Hope you had a nice holiday.

Hey @bkeepers, do you have a chance to look this over?

Thank you for the review. I will make sure to create smaller PRs in the future, sorry.

I have commented out the new config example so that people don't accidentally use it by default.
The logger.debug issue was because webstorm supports console.debug but npm does not. I have changed these to info like all the other logs, which is supported everywhere.
This has been rebased to resolve conflicts. Github couldn't do it automatically, but git on my machine had no issue with it.

🎉  Thanks @mezz! This is deploying now and should be available by the time you read this.

authors: bkeepers mezz

repo: probot/stale

license: isc

license_source: bigquery


text:
Send photo via XMPPFramework

Could you please update example for sending photo via XMPPFramework.
Thank you

Hello @quangpc, sending a picture is possible, just use the classic xmpp data transfer to send it.

Sending Image using the same way still unable to send the image.
Please help us here.
Here is how we are sending image.
    let data = UIImagePNGRepresentation(self.imageSelectedOrTaken)
    let imageStr = data?.base64EncodedString()

    let body = DDXMLElement.element(withName: "body") as! DDXMLElement
    let messageID = OneChat.sharedInstance.xmppStream?.generateUUID()
    let imageAttachement = DDXMLElement.element(withName: "attachment", stringValue: imageStr!) as! DDXMLElement

    let message = DDXMLElement.element(withName: "message") as! DDXMLElement
    message.addAttribute(withName: "type", stringValue: "chat")
    message.addAttribute(withName: "id", stringValue: messageID!)
    message.addAttribute(withName: "to", stringValue: (recipient?.jid.full())!)
    message.addChild(body)
    message.addChild(imageAttachement)

    OneChat.sharedInstance.xmppStream?.send(message)

Any help provided will be appreciated.
Thanks

authors: baoluo hussain3152 quangpc

repo: processone/xmpp-messenger-ios

license: mit


text:
Drop support for Python v3.8

As discussed on Discord, we want to drop support for Python v3.8 as it reached its end-of-life. We then can use asyncio.to_thread (available in Python >= 3.9) instead of asgiref.sync.sync_to_async (we should then do this together in the 3.0 release).

I took a quick look at replacing asgiref.sync_to_async with asyncio.to_thread, but I don't think it is worth it. We use sync_to_async quite often as a decorator, which is not directly possible with asyncio.to_thread. And asgiref also has the convenient method the other way around (async_to_sync).

I think it is more nuanced than that.
asgiref might need to stay for the Django integration as per their async doc.
However, there is no need to make it a dependency for any consumer that is not using Django.

We use sync_to_async quite often as a decorator, which is not directly possible with asyncio.to_thread

That should be fine. Beside Django integration, it seems it is only used in tests. That could stay there or it would be trivial to update to not use a decorator and explicitly wrap the function.

Ok, good point. I will give it a try.

So shall I close this as #1224 was merged or do we keep it open for the replacement of sync_to_async ?

So shall I close this as #1224 was merged or do we keep it open for the replacement of sync_to_async ?

PR #1226 will close it :-)

https://github.com/procrastinate-org/procrastinate/pull/1244 removed py3.8 from the codebase. This issue now only is about asgiref.

authors: ewjoachim medihack onlyann

repo: procrastinate-org/procrastinate


text:
chore: add params! macro export

Closes #25
This PR exports the params! macro which is very helpful when you have more than 16 parameters

Sorry forgot about this PR, updated rusqlite on my own. Still thanks ❤


text:
src/controller/python/chip/clusters/__init__.py requires manual edit for new clusters

Problem:
When someone adds a new cluster and runs codegen src/controller/python/chip/clusters/Objects.py creates the new cluster, but new cluster is not accessible within chip-repl because it is not added to src/controller/python/chip/clusters/__init__.py
Example of annoyance that can occur. Not easy to debug, institutional knowledge or 20+mins of debugging needed to figure this out.

This was fixed with https://github.com/project-chip/connectedhomeip/pull/34928

repo: project-chip/connectedhomeip


text:
Add a chip::VendorId type

Problem
We're hardcoding uint16_t for vendor-id right now.
Proposed Solution
Have chip::VendorId, make sure we use it consistently.

Happy to take this on; however, is this type sufficiently covered at present by https://github.com/project-chip/connectedhomeip/blob/master/src/lib/core/CHIPVendorIdentifiers.hpp#L37?
Or, would we prefer this structure:
#include <cstdint>

namespace chip {

//
// CHIP Vendor Identifiers (16 bits max)
//

typedef uint16_t VendorId;

enum
{
    Common       = 0x0000u,
    NestLabs     = 0x235Au,
    NotSpecified = 0xFFFFu
};

} // namespace chip

I'm not sure why I phrased the above as "add a chip::VendorId" type, since we absolutely do have that, and I had used it.. it's possible I was filing this in parallel with a spec issue and lost track of things....
We do have a bunch of places where we use uint16_t for vendor ids still (git grep "uint16_t [a-zA-Z]*[vV]endor" | grep -v gen) that we might want to think about converting to chip::VendorId.

This is done


text:
M5Stack device core paniced after start  dns-sd server

Problem
On branch of test_event_3.1 , Using the python chip-tool to test with M5Stack device, there is an error occurred on device side when it starts dns-sd server after network commissioning completed.
Logs:
I (797455) chip[DIS]: Start dns-sd server
I (797455) chip[DIS]: Found admin pairing for admin 0, node 0x0000000000BC5C01
V (797455) chip[DIS]: Using wifi MAC for hostname
I (797465) chip[DIS]: Advertise operational node 0000000000000000-0000000000BC5C01
I (797475) app-devicecallbacks: Current free heap: 62508
Guru Meditation Error: Core 0 panic'ed (LoadProhibited). Exception was unhandled.
Core 0 register dump:
PC   : 0x400014dc PS   : 0x00060230 A0   : 0x801429d4 A1   : 0x3fff1800
A2   : 0x00000001 A3   : 0xfffffffd A4   : 0x000000ff A5   : 0x0000ff00
A6   : 0x00ff0000 A7   : 0xff000000 A8   : 0x43333538 A9   : 0x00000087
A10   : 0x000005b3 A11   : 0x00000002 A12   : 0x3ffd3c69 A13   : 0x0000007f
A14   : 0x3ffd3caa A15   : 0x00000005 SAR   : 0x00000010 EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000001 LBEG  : 0x4000c349 LEND  : 0x4000c36b LCOUNT : 0xffffffff
Backtrace:0x400014d9:0x3fff1800 0x401429d1:0x3fff1810 0x40142a8e:0x3fff1950 0x40143032:0x3fff1a90 0x401434dd:0x3fff1b00 0x401451cd:0x3fff1b40 0x4009059d:0x3fff1ba0
0x401429d1: _mdns_append_fqdn at /Users/80266089/work/chip/esp/esp-idf/components/mdns/mdns.c:422
0x40142a8e: _mdns_append_fqdn at /Users/80266089/work/chip/esp/esp-idf/components/mdns/mdns.c:467
0x40143032: _mdns_append_srv_record at /Users/80266089/work/chip/esp/esp-idf/components/mdns/mdns.c:674
(inlined by) _mdns_append_answer at /Users/80266089/work/chip/esp/esp-idf/components/mdns/mdns.c:912
0x401434dd: _mdns_dispatch_tx_packet at /Users/80266089/work/chip/esp/esp-idf/components/mdns/mdns.c:1006
0x401451cd: _mdns_tx_handle_packet at /Users/80266089/work/chip/esp/esp-idf/components/mdns/mdns.c:3706
(inlined by) _mdns_execute_action at /Users/80266089/work/chip/esp/esp-idf/components/mdns/mdns.c:3975
(inlined by) _mdns_service_task at /Users/80266089/work/chip/esp/esp-idf/components/mdns/mdns.c:4098
0x4009059d: vPortTaskWrapper at /Users/80266089/work/chip/esp/esp-idf/components/freertos/xtensa/port.c:143

Python chip-tool issue "zcl NetworkCommissioning EnableNetwork" to device, device enter the network commissioning and success, but when device enter the process of start dns-sd the core panic occured on device.

@Hugh-Bao  As per our discussion, can you please clean and re-build the all-clusters-app. Also, there are can be some issues with test_event_3.1 branch with Mac (fixed in master #7388  and #7389). I would suggest you to use Raspberry Pi (or Ubuntu Linux) as the controller which would be used during the actual test event.

We're in progress of reviewing older issues. Is this still an issue given how old the SDK this was tested against? Please re-open if so. Thanks!

authors: Hugh-Bao dhrishi woody-apple


text:
Moving OpenSSL Package Config into Common BUILD

Problem
Currently pkg_config for OpenSSL is run twice by src/crypto/BUILD.gn and src/tools/chip-cert/BUILD.gn.
Change overview
src/tools/chip-cert/BUILD.gn is using OpenSSL package generated by src/crypto/BUILD.gn
Testing
Manually tested by generating, converting and verifying various CHIP certificates.
Ticket #6796

Please update the PR following the standard template that includes testing details.

updated

@woody-apple - summary was updated according to the template

"Manually tested by generating, converting and verifying various CHIP certificate"
could we add an automated test here? Or does one already exist?

Opened #7104 to follow up.

@woody-apple - summary was updated according to the template

@woody-apple


text:
[Zephyr] Erase key-value store on factory reset

Problem
ConfigurationManager::InitiateFactoryReset() method clears all keys added by ConfigurationManager methods, and
OpenThread settings. However, the method was not updated when the generic KeyValueStoreManager was added, hence
not all persistent data would be erased upon the factory reset.
Change overview

Erase all data written with both ConfigurationManager and KeyValueStoreManager upon the factory reset (e.g. after pressing Button 1 for >6 seconds on nRF Connect examples).
Also, remove the usage of std::string.

Testing
Added unit tests for Zephyr platform. Also, tested manually.

@rikorsev FYI as I'm modifying Telink platform, too.


text:
[BUG] ERROR exporting to docker image format

Version of copa
v0.2.0
Expected Behavior
Patched image is exported successfully
Actual Behavior
Encountered below error and then output froze, I had to ^C to exit.
 => ERROR exporting to docker image format                                                                                0.7s
 => => exporting layers                                                                                0.7s
 => => exporting manifest sha256:f4bxxxx2f7                                                       0.0s
 => => exporting config sha256:fadxxxx26f                                                         0.0s
------
 > exporting to docker image format:
------

Steps To Reproduce

Installed with brew install copa

Ran buildkit in a container with docker run --detach --rm --privileged -p 127.0.0.1:8888:8888/tcp --name buildkitd --entrypoint buildkitd moby/buildkit --addr tcp://0.0.0.0:8888

Ran trivy image --vuln-type os --ignore-unfixed -f json -o my-image.json my-image:test

Ran copa patch -i my-image:test -r my-image.json -t -patched -a tcp://0.0.0.0:8888

Received the error as shared above

Details about image from docker inspect, Architecture: arm64, Os: linux

@L3m0nb4tt3ry can you share your Dockerfile and/or image?

Here is the Dockerfile.
FROM php:8.2.1-apache

COPY start.sh /
RUN apt-get update && apt-get install -y \
		ruby-mustache \
	--no-install-recommends && rm -r /var/lib/apt/lists/*

WORKDIR /var/www/html

COPY foo bar

RUN \
	a2enconf log.conf && \
	a2enmod rewrite && \
	a2enmod headers && \
	a2dissite 000-default && \
	sed foobar && \
	sed foobar

CMD ["bash", "-C", "/start.sh"]

@L3m0nb4tt3ry I wasn't able to repro this.
I created a similar arm64 image based on your Dockerfile and was able to patch it successfully on an amd64 machine.
https://hub.docker.com/layers/sozercan/copa/172/images/sha256-0d37153e9a15d2521c39fa425b7553613b4749a38db164a1c066df9c100d31e1?context=explore
trivy image sozercan/copa:172-patched --ignore-unfixed
2023-06-02T21:42:21.937Z        INFO    Vulnerability scanning is enabled
2023-06-02T21:42:21.937Z        INFO    Secret scanning is enabled
2023-06-02T21:42:21.937Z        INFO    If your scanning is slow, please try '--scanners vuln' to disable secret scanning
2023-06-02T21:42:21.937Z        INFO    Please see also https://aquasecurity.github.io/trivy/v0.41/docs/secret/scanning/#recommendation for faster secret detection
2023-06-02T21:42:21.956Z        INFO    Detected OS: debian
2023-06-02T21:42:21.956Z        INFO    Detecting Debian vulnerabilities...
2023-06-02T21:42:21.985Z        INFO    Number of language-specific files: 0

sozercan/copa:172-patched (debian 11.6)

Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)

@sozercan Thanks for checking this out. I tried to reproduce the issue using the image from your repository, and I encountered the same error once again. Perhaps the issue could be related to buildkit? I am using a Mac with M1
https://hub.docker.com/layers/sozercan/copa/172/images/sha256-0d37153e9a15d2521c39fa425b7553613b4749a38db164a1c066df9c100d31e1?context=explore
Error:
[+] Building 1.2s (6/6) FINISHED
 => CACHED docker-image://docker.io/sozercan/copa:172                                                                                0.4s
 => => resolve docker.io/sozercan/copa:172                                                                                0.4s
 => CACHED apt update                                                                                0.0s
 => CACHED sh -c apt install --no-install-recommends --allow-change-held-packages -y libncurses6 libncursesw6 libxml2 ncurses-base apache2 apache2-bin  0.0s
 => diff (apt update) -> (sh -c apt install --no-install-recommends --allow-change-held-packages -y libncurses6 libncursesw6 libxml2 ncurses-base apac  0.0s
 => merge (docker-image://docker.io/sozercan/copa:172, diff (apt update) -> (sh -c apt install --no-install-recommends --allow-change-held-packages -y  0.0s
 => ERROR exporting to docker image format                                                                                0.8s
 => => exporting layers                                                                                0.8s
 => => exporting manifest sha256:5d253e1971cce5a51f53f9b6f1cfa548501951a4fdb3132453309e78bf38792a                                                       0.0s
 => => exporting config sha256:cb5e815296620c7eb653c37e22656d5d3351277a09b43a8910e1632dea01298a                                                         0.0s
------
 > exporting to docker image format:
------

Unfortunately, I don't have an M1 to validate.
@ashnamehrotra can you ptal

@L3m0nb4tt3ry  @sozercan
I was able to reproduce on my M1 following your steps. If you change the patched tag from "-patched" to "patched" it should work:
copa patch -i my-image:test -r my-image.json -t patched -a tcp://0.0.0.0:8888

authors: L3m0nb4tt3ry ashnamehrotra sozercan

repo: project-copacetic/copacetic


text:
PatternFly update

Update PatternFly to use the latest milestone packages

verified

repo: project-koku/koku-ui


text:
switch form deprecated "time scoped" args to using 'end_date' & 'star…

issue: https://issues.redhat.com/browse/COST-1193
This PR address the details pages

Codecov Report

Merging #1925 (67d1f58) into master (8505e65) will increase coverage by 0.46%.
The diff coverage is n/a.

:exclamation: Current head 67d1f58 differs from pull request most recent head d780e07. Consider uploading reports for the commit d780e07 to get more accurate results

@@            Coverage Diff             @@
##           master    #1925      +/-   ##
==========================================
+ Coverage   70.66%   71.12%   +0.46%
==========================================
  Files         371      371
  Lines        6326     6920     +594
  Branches     1126     1472     +346
==========================================
+ Hits         4470     4922     +452
- Misses       1740     1974     +234
+ Partials      116       24      -92

Impacted Files
Coverage Δ

...c/pages/costModels/createCostModelWizard/table.tsx
34.28% <0.00%> (-10.16%)
:arrow_down:

src/components/i18n/i18nProvider.tsx
57.14% <0.00%> (-9.53%)
:arrow_down:

src/pages/state/maintenance/maintenanceState.tsx
66.66% <0.00%> (-8.34%)
:arrow_down:

.../pages/costModels/createCostModelWizard/markup.tsx
27.27% <0.00%> (-8.03%)
:arrow_down:

...ges/costModels/costModelsDetails/utils/toolbar.tsx
77.50% <0.00%> (-7.80%)
:arrow_down:

...ostModels/createCostModelWizard/priceListTable.tsx
32.07% <0.00%> (-7.46%)
:arrow_down:

.../costModels/costModelsDetails/bottomPagination.tsx
82.60% <0.00%> (-7.40%)
:arrow_down:

src/store/common.ts
81.81% <0.00%> (-7.08%)
:arrow_down:

...ponents/reports/reportSummary/reportSummaryAlt.tsx
52.94% <0.00%> (-7.06%)
:arrow_down:

src/api/reports/reportUtils.ts
27.50% <0.00%> (-6.88%)
:arrow_down:

... and 123 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 8505e65...d780e07. Read the comment docs.


text:
avm: dont set current version if install prompt is declined after avm use

This was missing an error if they user doesn't elect to install the missing version. Without it, it proceeds to overwrite the version file. Also removed the initial text on the prompt for UX.
Closes #1413

LGTM!
Ive adjusted the PR title to reflect that its no longer an error.
Im not able to merge because your commits are not signed. You can sign them and force push or we wait for @armaniferrante to merge

I'll sign it, should set that up anyway

authors: paul-schaaf tomlinton

repo: project-serum/anchor


text:
Attempt at deobfuscating unknown instruction approval

That is how it looks like.

I think each account should be enriched to display isWritable and isSigner for each account. I will investigate how to do that.
for isWritable it seems we can get it from https://solana-labs.github.io/solana-web3.js/class/src/message.js~Message.html#instance-method-isAccountWritable
I also need to check how it looks when there are multiple unknown instructions
#91

That is where it is at, an example with 2 unknown instruction

repo: project-serum/spl-token-wallet


text:
buildah bud walks symlinks

After a symlink is created, buildah bud would fail if the symlink was
mounted as a volume.
Fixes https://github.com/projectatomic/buildah/issues/439
Signed-off-by: umohnani8 umohnani@redhat.com

@rhatdan @nalind @TomSweeneyRedHat PTAL

Doing the symlink calls inside of a chroot.
Cannot use filepath.EvalSymlinks() as there may be paths with non-existent directories/files and filepath.EvalSymlinks() calls lstat internally, which throws a directory does not exist error. So doing it with a loop and Lstat and ReadLink.
I put the chroot code under imagebuildah in the file chroot_symlink.go, not sure where exactly to put. Can move it around based on where it fits better.
Added tests for the various cases I could think of.
@rhatdan @nalind PTAL

@nalind PTAL

@nalind PTAL

@rh-atomic-bot r=ripcurld

repo: projectatomic/buildah


text:
FATA[0001] can not copy docker://busybox:latest: manifest contains multiple images

In the F26 updates-testing stream for Atomic Host (version 26.120), we saw the following failure:
# rpm-ostree status
State: idle
Deployments:
● fedora-atomic:fedora/26/x86_64/testing/atomic-host
                   Version: 26.120 (2017-09-13 05:44:28)
                    Commit: f5cc5928cf44a11b93276c95a3f7ff4eb39a545575b65876cde21426e62d39f1

# rpm -q skopeo
skopeo-0.1.24-1.dev.gita41cd0a.fc26.x86_64

# atomic --debug pull docker.io/busybox
Namespace(_class=<class 'Atomic.pull.Pull'>, assumeyes=False, debug=True, func='pull_image', ignore=False, image='docker.io/busybox', profile=False, reg_type=None, storage=None)
Pulling docker.io/library/busybox:latest ...
Executing: /usr/bin/skopeo --policy=/etc/containers/policy.json --debug copy --remove-signatures docker://docker.io/library/busybox:latest docker-daemon:docker.io/library/busybox:latest
DEBU[0000] Looking for TLS certificates and private keys in /etc/docker/certs.d/docker.io
DEBU[0000] Using registries.d directory /etc/containers/registries.d for sigstore configuration
DEBU[0000]  Using "default-docker" configuration
DEBU[0000]  No signature storage configuration found for docker.io/library/busybox:latest
DEBU[0000] IsRunningImageAllowed for image docker:docker.io/library/busybox:latest
DEBU[0000]  Using default policy section
DEBU[0000]  Requirement 0: allowed
DEBU[0000] Overall: allowed
DEBU[0000] GET https://registry-1.docker.io/v2/
DEBU[0000] Ping https://registry-1.docker.io/v2/ err <nil>
DEBU[0000] Ping https://registry-1.docker.io/v2/ status 401
DEBU[0000] GET https://registry-1.docker.io/v2/library/busybox/manifests/latest
DEBU[0000] GET https://registry-1.docker.io/v2/library/busybox/manifests/sha256:030fcb92e1487b18c974784dcc110a93147c9fc402188370fbfd17efabffc6af
DEBU[0001] Downloading /v2/library/busybox/blobs/sha256:54511612f1c4d97e93430fc3d5dc2f05dfbe8fb7e6259b7351deeca95eaf2971
DEBU[0001] GET https://registry-1.docker.io/v2/library/busybox/blobs/sha256:54511612f1c4d97e93430fc3d5dc2f05dfbe8fb7e6259b7351deeca95eaf2971
DEBU[0001] docker-daemon: Closing tar stream to abort loading
FATA[0001] can not copy docker://busybox:latest: manifest contains multiple images

Traceback (most recent call last):
  File "/usr/bin/atomic", line 185, in <module>
    sys.exit(_func())
  File "/usr/lib/python3.6/site-packages/Atomic/pull.py", line 54, in pull_image
    be.pull_image(self.args.image, remote_image_obj, debug=self.args.debug, assumeyes=self.args.assumeyes)
  File "/usr/lib/python3.6/site-packages/Atomic/backends/_docker.py", line 346, in pull_image
    policy_filename=trust.policy_filename)
  File "/usr/lib/python3.6/site-packages/Atomic/util.py", line 429, in skopeo_copy
    return check_call(cmd, env=os.environ)
  File "/usr/lib/python3.6/site-packages/Atomic/util.py", line 197, in check_call
    return subprocess.check_call(cmd, env=env, stdin=stdin, stderr=stderr, stdout=stdout, close_fds=True)
  File "/usr/lib64/python3.6/subprocess.py", line 291, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/usr/bin/skopeo', '--policy=/etc/containers/policy.json', '--debug', 'copy', '--remove-signatures', 'docker://docker.io/library/busybox:latest', 'docker-daemon:docker.io
/library/busybox:latest']' returned non-zero exit status 1.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/atomic", line 201, in <module>
    sys.exit(e.returncode)
SystemExit: 1

If I rollback the system to the previous version of Atomic Host on the updates-testing branch, we see a successful pull:
# rpm-ostree status
State: idle
Deployments:
● fedora-atomic:fedora/26/x86_64/testing/atomic-host
                   Version: 26.119 (2017-09-12 00:44:12)
                    Commit: f03426d576f91edb7d6cdcf988a3f8136d458fd15287f975519c87aceb7fd112

  fedora-atomic:fedora/26/x86_64/testing/atomic-host
                   Version: 26.120 (2017-09-13 05:44:28)
                    Commit: f5cc5928cf44a11b93276c95a3f7ff4eb39a545575b65876cde21426e62d39f1

# rpm -q skopeo
skopeo-0.1.23-6.git1bbd87f.fc26.x86_64

# atomic --debug pull docker.io/busybox
Namespace(_class=<class 'Atomic.pull.Pull'>, assumeyes=False, debug=True, func='pull_image', ignore=False, image='docker.io/busybox', profile=False, reg_type=None, storage=None)
Pulling docker.io/library/busybox:latest ...
Executing: /usr/bin/skopeo --policy=/etc/containers/policy.json --debug copy --remove-signatures docker://docker.io/library/busybox:latest docker-daemon:docker.io/library/busybox:latest
DEBU[0000] Looking for TLS certificates and private keys in /etc/docker/certs.d/docker.io
DEBU[0000] Using registries.d directory /etc/containers/registries.d for sigstore configuration
DEBU[0000]  Using "default-docker" configuration
DEBU[0000]  No signature storage configuration found for docker.io/library/busybox:latest
DEBU[0000] IsRunningImageAllowed for image docker:docker.io/library/busybox:latest
DEBU[0000]  Using default policy section
DEBU[0000]  Requirement 0: allowed
DEBU[0000] Overall: allowed
DEBU[0000] GET https://registry-1.docker.io/v2/
DEBU[0000] Ping https://registry-1.docker.io/v2/ err <nil>
DEBU[0000] Ping https://registry-1.docker.io/v2/ status 401
DEBU[0000] GET https://registry-1.docker.io/v2/library/busybox/manifests/latest
DEBU[0001] Downloading /v2/library/busybox/blobs/sha256:54511612f1c4d97e93430fc3d5dc2f05dfbe8fb7e6259b7351deeca95eaf2971
DEBU[0001] GET https://registry-1.docker.io/v2/library/busybox/blobs/sha256:54511612f1c4d97e93430fc3d5dc2f05dfbe8fb7e6259b7351deeca95eaf2971
DEBU[0001] Manifest has MIME type application/vnd.docker.distribution.manifest.v2+json, ordered candidate list [application/vnd.docker.distribution.manifest.v2+json]
DEBU[0001] ... will first try using the original manifest unmodified
Copying blob sha256:03b1be98f3f9b05cb57782a3a71a44aaf6ec695de5f4f8e6c1058cd42f04953e
DEBU[0001] Downloading /v2/library/busybox/blobs/sha256:03b1be98f3f9b05cb57782a3a71a44aaf6ec695de5f4f8e6c1058cd42f04953e
DEBU[0001] GET https://registry-1.docker.io/v2/library/busybox/blobs/sha256:03b1be98f3f9b05cb57782a3a71a44aaf6ec695de5f4f8e6c1058cd42f04953e
DEBU[0002] Detected compression format gzip
 0 B / 698.42 KB [-------------------------------------------------------------]DEBU[0002] Using original blob without modification
DEBU[0002] Sending as tar file sha256:03b1be98f3f9b05cb57782a3a71a44aaf6ec695de5f4f8e6c1058cd42f04953e
 485.73 KB / 698.42 KB [======================================>----------------]
Copying config sha256:54511612f1c4d97e93430fc3d5dc2f05dfbe8fb7e6259b7351deeca95eaf2971
DEBU[0002] No compression detected
 0 B / 1.46 KB [---------------------------------------------------------------]DEBU[0002] Using original blob without modification
DEBU[0002] Sending as tar file sha256:54511612f1c4d97e93430fc3d5dc2f05dfbe8fb7e6259b7351deeca95eaf2971

Writing manifest to image destination
DEBU[0002] Sending as tar file manifest.json
Storing signatures
DEBU[0002] docker-daemon: Closing tar stream
DEBU[0002] docker-daemon: Waiting for status
DEBU[0002] docker-daemon: sending done, status <nil>

Yes, Docker hub switched to serve manifest lists and we do not support them, the issue to follow is https://github.com/containers/image/issues/114

Ah, so it was a Docker Hub issue...thanks!

Nope lol it's our issue because we don't support images with manifest lists

¯_(ツ)_/¯

authors: miabbott runcom

repo: projectatomic/skopeo