]> sigrok.org Git - sigrok-firmware-fx2lafw.git/blob - fx2lib/NOTES
Import fx2lib into fx2lafw directly.
[sigrok-firmware-fx2lafw.git] / fx2lib / NOTES
1 Notes on Various things I've learned about SDCC and the FX2
2
3 * libusb on Linux
4 * cycfx2prog: http://www.triplespark.net/elec/periph/USB-FX2/software/index.html
5  - most of this functionality is now in the fx2load package for python
6  - which is in examples/fx2
7 * sdcc has sdcc/support/scripts/keil2sdcc.pl which I used to create the fx2regs.h file from the keil header. 
8 * sdcc is little endian, keil is big endian (important if doing usb communication)
9 * xdata can go up to 64k on the EZ-USB development board but
10   - the fx2 chip itself only has 16k (end at 0x4000) Firmware written for other than the dev board
11   - should use --xram-size --xram-loc etc to make sure it isn't using memory beyond 16k.
12 * linux has objcopy, which can be used in place of Hex2bix for bix files 
13   - objcopy -I ihex -O binary --pad-to=8192 input [output]
14
15
16 Memory
17  * 256 bytes internal
18    - lower 128=registers/bits (direct or indirect)
19    - upper 128=stack (or whatever but only indirect addressing)
20    - sfs occupy upper 128 space only direct addressing
21
22  * external
23   - 16k on chip 0-0x3fff
24   - 512 bytes on chip scratch ram 0xe000 - 0xe1ff (data memory only)
25   - epbuffers and control at 0xe200-0xffff (data memory only)
26   
27    Only the on chip 16k and 512 bytes can be uploaded w/ eeprom or downloaded to host with SETUPPTR
28    Might be possible to load the descriptors to the scratch ram instead of code ram area?
29
30 sdcc data types
31   data/near=direct addressable internal memory (default for model-small)
32   xdata/far=external ram (default for model-large)
33   idata=indirect addressable internal memory
34   pdata=access to xdata area, but uses sfr to get to address (sdcc 4.1)
35   code=code memory, study this more.
36   bit=uses lower 128 bit area
37   
38
39 TODO:
40  * Possibly add CKCON and bmSTRETCH customization
41  * IN2CLR and INT4CLR registers can be used intead of explicitly clearing int2 and int4 interrupts. (Faster)
42    See (15.5)