[openfirmware] [commit] r2607 - dev/usb2/device/dediprog
repository service
svn at openfirmware.info
Sat Oct 15 18:40:20 CEST 2011
Author: wmb
Date: Sat Oct 15 18:40:20 2011
New Revision: 2607
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2607
Log:
Added poorly-tested Dediprog SF100 SPI FLASH programmer driver - not used in any builds.
Added:
dev/usb2/device/dediprog/
dev/usb2/device/dediprog/dediprog.fth
Added: dev/usb2/device/dediprog/dediprog.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dev/usb2/device/dediprog/dediprog.fth Sat Oct 15 18:40:20 2011 (r2607)
@@ -0,0 +1,167 @@
+\ See license at end of file
+purpose: Dediprog SF100 SPI FLASH programmer driver
+
+\ Mostly untested
+
+\ VID: 0483 PID: dada
+
+0 instance value inbuf
+0 instance value outbuf
+
+: alloc-buffers ( -- )
+ h# 10 dma-alloc to inbuf
+ h# 10 dma-alloc to outbuf
+;
+: free-buffers ( -- )
+ inbuf h# 10 dma-free
+ outbuf h# 10 dma-free
+;
+: ?error ( usberr -- )
+ ?dup if
+ noop \ Patch debug-me here if desired
+ push-hex
+ ." Dediprog: USB error " . cr
+ pop-base
+ then
+;
+: set-millivolts ( mv -- )
+ case
+ 0 of 0 endof
+ d# 1800 of h# 12 endof
+ d# 2500 of h# 11 endof
+ d# 3300 of h# 10 endof
+ d# 3500 of h# 10 endof
+ ( -- ) ." Unsupported voltage" cr abort
+ endcase
+ >r 0 0 h# ff r> h# 42 9 control-set ?error
+;
+\ Speed# 0 1 2 3 4 5 6 7
+\ KHz 24000 , 8000 , 12000 , 3000 , 2180 , 1500 , 750 , 375 ,
+\ Divisor 1 3 2 8 11 16 32 64
+\ Base clock frequency is 24 MHz = 24000 kHz
+
+: set-speed ( speed# -- )
+ >r 0 0 h# ff r> h# 42 h# 61 control-set ?error
+;
+0 value offset
+: seek ( d.offset -- error? )
+ if ." Dediprog: seek offset too large" cr drop true exit then
+ to offset
+ false
+;
+
+: spi-read ( adr len start -- actual )
+
+;
+: send ( readadr,len writeadr,len -- )
+ 2 pick if 1 else 0 then >r ( readadr,len writeadr,len r: readlen )
+ r> h# ff h# 42 1 control-set ?error ( readadr,len )
+ dup if
+ 0 h# bb8 h# c2 1 control-get ?error drop
+ else
+ 2drop
+ then
+;
+: check-devicestring ( -- error? )
+ 0 inbuf c!
+\ inbuf 1 h# ef03 0 h# c3 7 control-get ... \ From rsmith snoop
+ inbuf 1 0 0 h# c3 h# 7 control-get if true exit then ( actual )
+ 1 <> if true exit then
+ inbuf c@ h# ff <> if true exit then
+ inbuf h# 10 h# ff h# ff h# c2 h# 8 control-get if true exit then
+ h# 10 <> if true exit then
+ ." Opened " inbuf h# 10 type cr
+ " SF100" inbuf swap comp 0=
+;
+: command-a ( -- )
+ 0 inbuf c! inbuf 1 0 0 h# c3 h# b control-get ?error ( n )
+ 1 <> ?error
+ inbuf c@ h# 6f <> ?error
+;
+: command-c ( -- ) 0 0 0 0 h# 42 4 control-set ?error ;
+: write ( adr len -- )
+;
+: open ( -- flag )
+ set-device? if false exit then
+ device set-target
+ reset? if
+ configuration set-config if
+ ." userial: set-config failed" cr
+ false exit
+ then
+ bulk-in-pipe bulk-out-pipe reset-bulk-toggles
+ then
+ alloc-buffers
+ inbuf h# 10 bulk-in-pipe begin-bulk-in
+ command-a
+ command-a
+ check-devicstring if free-buffers false exit then
+ dediprog-command-c
+ d# 3500 set-millivolts
+
+ true
+;
+: close ( -- )
+ 0 set-millivolts
+;
+\ Send sequence
+\ w 9f r4 ef 30 11 00
+\ w 9f r3 ef 30 11
+\ w 9f r2 ef 30
+\ w 15 r2 00 00
+\ w4 ab 00 00 00 r3 10 10 10
+\ w4 ab 00 00 00 r2 10 10
+\ w4 90 00 00 00 r3 ef 10 ef
+\ w4 90 00 00 00 r2 ef 10
+\ set-voltage 0
+\ device string
+\ CTL: 42 07 0009 0007 0
+\ set-voltage 0x10 (3V3)
+\ set-speed 0x02
+\ set-voltage 0
+\ device string
+\ command-a
+\ command-a
+\ command-a
+\ set-voltage 0
+\ command-a
+\ device string
+\ CTL: 42 07 0009 0005 0
+\ set-voltage 0x10
+\ device string (c3,07 c2,08)
+\ CTL: 42 07 0009 0005 0
+\ set-voltage 0x10
+
+\ CTL: 42 20 0000 0000 4 Data: 80 00 00 02
+\ Bulk IN EP 82: 512 bytes: 02 01 01 02 01 5d ff ff ff ff 02 ...
+\ Bulk IN EP 82: 512 bytes: 09 b5 75 82 ...
+\ ...
+\ Last one is URB 220, data: ff .. ff 09 b2 c2 54
+\ URB 221:
+\ CTL: 42 20 0000 00ff 0
+\ set-voltage 0x10
+\ CTL: 42 01 00ff 0001 1 wdata: 05 -> 00 status (01 bit is write in progress)
+\ CTL: 42 01 00ff 0001 1 wdata: 06 write-enable
+\ CTL: 42 01 00ff 0001 1 wdata: 05 -> 02 status (02 bit is write-enable)
+
+\ CTL: 42 01 00ff 0001 4 wdata: d8 00 00 00 erase (adr-hi,mid,lo)
+\ CTL: 42 01 00ff 0001 1 wdata: 05 -> 03 status
+
+\ again again ... eventually returns 00 instead of 03 at URB 264, 266
+
+\ CTL: 42 01 00ff 0001 1 wdata: 06 write-enable
+\ CTL: 42 01 00ff 0001 1 wdata: 05 -> 02 status
+
+\ CTL: 42 30 0000 0000 4 wdata: 00 01 00 01
+
+\ URB 271
+\ Bulk out EP 02 512 bytes data: 02 01 01 02 01 5d ff ff ff ff ff 02 05 fc ...
+
+\ many more
+\ URB 527
+\ CTL: 42 01 00ff 0001 1 wdata: 05
+\ CTL: C2 01 0bb8 0000 1 rdata: 00
+\ set-voltage 0
+\ CTL: 42 07 0009 0006 0
+\ set-voltage 0
+\ set-voltage 0
More information about the openfirmware
mailing list