fc-host-tools-r13 release, fluid-mnf, end of FreeCalypso

Mychaela Falconia mychaela.falconia at gmail.com
Mon Mar 16 18:08:47 UTC 2020


Hi DS!

> I was just wondering, do you
> have an idea as to why there is a speed difference between
> your binary protocol and FLUID? Perhaps some form of
> compression, such as RLE?

FLUID does two additional measures to increase speed beyond what we do:

1) They implement some form of LZ77 compression;

2) They have a very neat architecture in which serial data transfer
and flash erase&program operations on the target are overlapped in
time.

In our fc-loadtool architecture everything is strictly sequential: we
first erase, then program, even with our new flash e-program-* commands
that combine the two steps for the user.  And in the program step as
we do 2048 bytes at a time, the code in loadagent first receives the
2048 byte block from loadtool, then goes into the flash programming
operation whose speed is determined by physics inside the flash chip.

In FLUID all of these steps are overlapped in time.  They use the
available RAM on the target (Calypso internal RAM) to maintain a
fairly deep FIFO of 8192-byte blocks that have been received from the
host but haven't been programmed into flash yet, and the process is
pipelined.  The host side begins by sending the complete list of
sectors to be erased to the target-side command interpreter, then
begins streaming the data blocks to be programmed, as much as the
known depth of the target RAM FIFO will allow.  The main loop on the
target side implements the following algorithm:

1) If there is a block ready in the FIFO and the sector where that
block is going has already been erased, run the flash program step for
one 8192-byte block pulled from the FIFO.

2) If condition 1 wasn't met but there are sectors remaining to be
erased, run the flash erase step for one sector.

3) If neither condition 1 nor condition 2 was met, just run the serial
stream Rx process.

And the kicker: flash erase and program operation functions do the few
MEMIF write cycles to kick off the operation inside the flash chip,
then as they poll the chip for operation completion (physics inside
the flash chip), the same polling loop calls the serial stream Rx
function - thus the physical flash erase&program operations and the
serial data transfer happen simultaneously rather than sequentially.

Can we implement the same pipelined architecture plus LZ77 compression
in our own fc-loadtool and get same-as-FLUID flash programming speed
on all of our targets, including those not supported by FLUID?
Two-part answer:

1) Of course I can do it, but:

2) Right now I have no incentive to do any such further sw/fw/tools
work until and unless FreeCalypso funding situation dramatically
improves.

Hasta la Victoria, Siempre,
Mychaela aka The Mother


More information about the Community mailing list