>
> Hmm... the only ACK from a write on the buffer is got when executing
> the buffer ("the whole buffer was executed") as a reply to execute
> buffer, this is in purpose not to have PC's doing "ping-pong" with the
> AVR during writing of the buffer - the host can do non-blocking I/O to
> check for a NAK after streaming the write commands. (Or send an NOPACK
> and read until you get an ACK - then there were no NAK's when
> writing). Of course it would also be possible to have them all return
> ACK and then do write lots + count all the ACK's on the host side, but
> i dont see that as necessary.
>
Ok scratch that :P, i changed those commands to return ACK too,
because that allows me to get by with less job on the flow control,
eg. i can wait for all the ACK's to "come home" - then the serial
buffer is empty. Simpler, and it allows to use a generic ping-style
command function on any command (in case this streaming performance is
not needed).I'm still pondering on the n-byte write --- Anyways, i attach (just for getting an idea on the protocol, dunno) the main AVR parser source and the newest version of the protocol specification. The AVR source isnt stand alone as in the project has many other .c files which arent needed to understand the protocol, but i dont mean you to compile it, just to be looked at (it does compile though (with all the support files)). It also lacks license header. (It'll be GPLv2+ when tested as working - eg. when i get the flashrom part done). Now to sleep... -- urjaman
Serial Flasher Protocol Specification
Command And Answer Sequence - not all commands give an answer
PC: LENGHT(8bit) COMMAND(8bit) <LENGHT PARAMETER BYTES>
DEV: ACK/NAK(8bit) <OPTIONAL RETURN BYTES (only if ACK)> or nothing
ACK = 0x10
NAK = 0xBA
All multibyte values are little-endian.
COMMAND Description Parameters Return
Value
0x00 Query programmer iface version none ACK +
16bit version (nonzero)
0x01 Query programmer name none ACK +
16 bytes string (null padding)
0x02 NOPACK none ACK
0x03 Query serial buffer size none ACK +
16bit size / NAK
0x04 Query supported bustypes none ACK +
8-bit flags (as per flashrom) / NAK:
bit 0:
PARALLEL
bit 1:
LPC
bit 2:
FWH
bit 3:
SPI if ever supported
0x05 Query supported chip size none ACK +
8bit power of two / NAK
0x06 Query operation buffer size none ACK +
16bit size / NAK
0x07 Read byte 24-bit addr ACK +
BYTE / NAK
0x08 Read n bytes 24-bit addr + 24-bit lenght ACK +
length bytes / NAK
0x09 Initialize operation buffer none ACK /
NAK
0x0A Write to opbuf: Write byte 24-bit addr + 8-bit byte ACK /
NAK (NOTE: takes 6 bytes in opbuf)
0x0B Write to opbuf: Write byte seq 8-bit byte ACK /
NAK (NOTE: takes 1 bytes in opbuf)
0x0C Write to opbuf: delay 32-bit usecs ACK /
NAK (NOTE: takes 5 bytes in opbuf)
0x0D Execute operation buffer none ACK /
NAK
- Execute operation buffer will also clear it, regardless of
the return value
0x?? unimplemented command any NAK
frser.c
Description: Binary data
-- coreboot mailing list: [email protected] http://www.coreboot.org/mailman/listinfo/coreboot

