[U-Boot] A proposal/hack for an efficient USB DFU for linux based boards

Krishna Pattabiraman codelectron at googlemail.com
Fri Mar 7 19:56:24 CET 2014


Hi,

Thanks for your time,

 Please find following comments:

>
> 1. Current solution (u-boot):
> - It is possible to specify your own "dfu_alt_info" environment
>   variable when you call dfu command.
>
> 2. Speed improvement - section "Making it faster" from:
> http://codelectron.wordpress.com/2014/02/28/flexible-firmware-upgrade/
>
> - I've noticed that you are referring to following dfu-util version:
> dfu-util - (C) 2007 by Openmoko Inc.
>
> It seems to be a bit old one.
>

I just used the content from my old documentation, But im referring to
current implementation.


> The newest GIT repo can be found at:
> git://gitorious.org/dfu-util/dfu-util.git
>
> I'm referring to following SHA1 (master branch):
> bda43a52a6c5e9dcd159236553b0d5c511616e77
>
> The code at dfuload_do_dnload() function is already rewritten to only
> wait:
> milli_sleep(dst.bwPollTimeout);
>
> which is correct, since non-zero values are explicitly specified in
> u-boot (when e.g. target expects that eMMC data will be written).
>
> It seems that the proposed improvement is already implemented.
>

I dont think its implemented, you can refer here, its the block of code
what I am referring to,

https://gitorious.org/dfu-util/dfu-util/source/bda43a52a6c5e9dcd159236553b0d5c511616e77:src/dfu_load.c#L123
https://gitorious.org/dfu-util/dfu-util/source/bda43a52a6c5e9dcd159236553b0d5c511616e77:src/dfu_load.c#L137


> As a side note:
> To improve transmission speed we were even trying to increase the EP0
> packet size on HOST machine. Unfortunately it has some limitations
> (4 KiB if I'm not wrong).
>
Yes I do think so about the limitation, as a standard EP0 should support
atleast 64 bytes and DFU is based on that.

>
> Anyway, I'm open for potential DFU transmission speed improvements.
>
>
> 3. Flexibility improvement - section "Making it flexible"
>
> The idea of adding headers seems appealing - but there are as usual
> some corner cases:
>
> - Backward compatibility - dfu-util and dfu use number of alt settings
>   to chose the memory region to be written. That is why you observe a
>   lot of alt=X when you type dfu-util -l. We would need some extra
>   switch in the dfu-util to support yours header based approach.
>
> - In u-boot we would like to have some degree of control of where and if
>   we flash data. I personally like to specify beforehand (in envs) what
>   parts of memory are available for flashing.
>

I developed it keeping in mind a situation in field where there can be a
complete change in memory organisation.


> - Some more complicated schemes shall be considered as well. I've got
>   some pending patches to support eMMC's bootparts flashing via DFU.
>
> - Also the header itself only assumes NAND being the backing memory. But
>   we now also alter content of eMMC and RAM with DFU. This is missing.
>
> - The information provided by headers is already stored at
>   "dfu_alt_info" environment variable. It is also used by other gadgets.
>

It was an example code based on what I had implemented some time back. It
was based on nand flash, but the idea will be the same for any other  type.

I just wanted to share the idea of a different type of implementation of
USB DFU.


Krishna
www.codelectron.com


More information about the U-Boot mailing list