diff --git a/README.md b/README.md new file mode 100644 index 0000000..86c159c --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ +spt to hex converter + +This programm extract firmware from hex2spt gerenated Cypress EZ-USB +spt script file. +Copyright (C) 2013 Emmanuel Fusté + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +spt is a generic USB commands scripting format, but as we know how hex files +are converted to spt by standard cypress tools or procedures to get back +an hex file from a hex-converted-to-spt file. + + +each USB transaction is described by a record +record format: 32 byte header in little endian + data + +uint Signature == 0x54505343 or byte[4] == 'CSPT' //4 +uint RecordSize == header size + data size == 32 + data size //8 +ushort HeaderSize == 32 == 0x0020//10 +byte Tag == 0 == 0x00//11 + +Device on wich the script will be played : selected at runtime, +0x0 in the script: +byte ConfigNum == 0 == 0x00 //12 +byte IntfcNum == 0 == 0x00 //13 +byte AltIntfc == 0 == 0x00 //14 +byte EndPtAddr == 0 = 0x00 //15 + +byte bReqType == 0x40 in our case (TGT_DEVICE|REQ_VENDOR|DIR_TO_DEVICE) //16 +byte CtlReqCode //17 +byte reserved0 is generaly 0x20//18 + +ushort wValue //20 +ushort wIndex //22 +byte reserved1 ~ 0x9F //23 +byte reserved2 ~ 0x00 //24 + +uint Timeout ~ 0x00000005 //28 +uint DataLen; //32 + +hex to spt converter do the following: +1 CPU put in reset mode (A0 request to write 0x01 at 0xE600 for FX2LP) +2 upload of vendor_ax firmware with A0 request +3 CPU put in run mode (A0 request to write 0x00 to addresss 0xE600 for FX2LP) +4 upload of external RAM code with A3 vendor request implemented by vendor_ax +5 CPU put in reset mode +6 upload of RAM code with A0 vendor request (all code under 16k on FX2LP) +7 CPU put in run mode + +spt generated by cypress tools upload inconditionnaly vendor_ax firmware. +If there is nothing to upload to external ram, step 4 is skipped. + +If manualy recorded, step 2,3,4,5 could be omitted if no code need to be +uploaded to external ram. + +all contiguous hex record data are packed in one usb transaction and re-split +in two if the packed result in payload > 4k +Cypress tools generate hex file with 16 bytes of data max per record. +Decoded spt data payload will be re-split in 16 bytes hex record.