A more compact protocol specification attached - i'll try and clean
the flashrom driver code a bit and send a patch next - but for now a
small log clip (with jedec.c doing erase checking etc (eg. as is in
svn now) - on a real serial port at 115200):
(and yeah i did a ncftp "mget *" on the flashrom directory to move the
stuff over to the another computer - so it didnt copy the svn data -
so no revision on that)
---
root /home/urjaman/flashrom # time ./flashrom -p
serprog=/dev/ttyS0:115200 -w randomdata.bin
flashrom v0.9.0-r
serprog: Programmer name "ATMega168 SFR"
Calibrating delay loop... OK.
Found chip "Winbond W29C020C" (256 KB) at physical address 0xfffc0000.
Flash image seems to be a legacy BIOS. Disabling checks.
Programming page: 2047 at address: 0x0003ff80
real 1m57.793s
user 0m0.773s
sys 0m0.003s
---
--
urjaman
Serial Flasher Protocol Specification - a small redesign for performance
Command And Answer Sequence - not all commands give an answer
PC: COMMAND(8bit) <parameters determined by opcode>
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 NOP (to synchronize) none NAK +
ACK (a special sequence for easier sync)
0x01 Query programmer iface version none ACK +
16bit version (nonzero)
0x02 Query supported commands bitmap none ACK +
32 bytes (256 bits) of supported cmds flags
eg. cmd
0 support: byte 0 bit 0
cmd 1
support: byte 0 bit 1
cmd 7
support: byte 0 bit 7
cmd 8
support: byte 1 bit 0
0x03 Query programmer name none ACK +
16 bytes string (null padding) / NAK
0x04 Query serial buffer size none ACK +
16bit size / NAK
0x05 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
0x06 Query supported chip size none ACK +
8bit power of two / NAK
0x07 Query operation buffer size none ACK +
16bit size / NAK
0x08 Query write-n maximum data len none ACK +
24bit maximum length / NAK
0x00 Read byte 24-bit addr ACK +
BYTE / NAK
0x0A Read n bytes 24-bit addr + 24-bit length ACK +
length bytes / NAK
0x0B Initialize operation buffer none ACK /
NAK
0x0C Write to opbuf: Write byte 24-bit addr + 8-bit byte ACK /
NAK (NOTE: takes 6 bytes in opbuf)
0x0D Write to opbuf: Write n 24-bit length + 24-bit addr + ACK /
NAK (NOTE: takes 7+n bytes in opbuf)
+ length bytes of data
0x0E Write to opbuf: delay 32-bit usecs ACK /
NAK (NOTE: takes 5 bytes in opbuf)
0x0F Execute operation buffer none ACK /
NAK
- Execute operation buffer will also clear it, regardless of
the return value
0x?? unimplemented command any NAK
This define listing should help C coders - (it's here to be the single source
for copying - will be a .h someday i think)
#define S_ACK 0x10
#define S_NAK 0xBA
#define S_CMD_SYNCNOP 0x00 /* No operation
*/
#define S_CMD_Q_IFACE 0x01 /* Query interface version
*/
#define S_CMD_Q_CMDMAP 0x02 /* Query supported commands
bitmap */
#define S_CMD_Q_PGMNAME 0x03 /* Query programmer name
*/
#define S_CMD_Q_SERBUF 0x04 /* Query Serial Buffer Size
*/
#define S_CMD_Q_BUSTYPE 0x05 /* Query supported bustypes
*/
#define S_CMD_Q_CHIPSIZE 0x06 /* Query supported chipsize
(2^n format) */
#define S_CMD_Q_OPBUF 0x07 /* Query operation buffer size
*/
#define S_CMD_Q_WRNMAXLEN 0x08 /* Query Write to opbuf:
Write-N maximum lenght */
#define S_CMD_R_BYTE 0x09 /* Read a single byte
*/
#define S_CMD_R_NBYTES 0x0A /* Read n bytes
*/
#define S_CMD_O_INIT 0x0B /* Initialize operation buffer
*/
#define S_CMD_O_WRITEB 0x0C /* Write opbuf: Write byte with
address */
#define S_CMD_O_WRITEN 0x0D /* Write to opbuf: Write-N
*/
#define S_CMD_O_DELAY 0x0E /* Write opbuf: udelay
*/
#define S_CMD_O_EXEC 0x0F /* Execute operation buffer
*/
--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot