Memory map :
0x0 - 0x161a main page program
0x50f6 - 0x7f76 main page data
Writing at adress 0 make the dsp start.
Each instruction is coded on 24 bits. That's why the padding stuff is need because 21*3=63 and usb work by 64 bits. The padding should be removed in the usb firmware before sending it to dsp.
The data is 16 bits words.
Analog supports 4 types of dsp (
http://www.analog.com/processors/processors/index.html ).
Analog make dsl modem with adsp dsp :
http://www.analog.com/UploadedFiles/Obsolete_Data_Sheets/3520938669281275868AD20mps910.pdf
Looking at
http://www.analog.com/UploadedFiles/Data_Sheets/131820591231341383244687ADSP_2185L_a.pdf we can see similar features to eagle dsp :
- IDMA boot
- 24bits instruction
- 16bits data
- Internal memory and overlay stuff.
there is a sumary of adsp chip on
http://www.analog.com/UploadedFiles/Data_Sheets/26988897222791524014637367292314678ADSP_218xN_0.pdf .
From the IDMA overlay (p17) it could be a ADSP-2187, ADSP-2188 or ADSP-2189.
TODO : check all chip that support IDMA on
http://www.analog.com/processors/processors/ADSP/dataSheets.html
TODO : find the instructions supported by this dsp. (
http://www.analog.com/processors/epManualsDisplay/0,2795,,00.html?SectionWeblawId=432&ContentID=33133&Language=English )
TODO : look at other cpu familly
TS have 32 bits intructions
Software for adsp :
- disassembler for adsp2181 : http://www.dce.bg/~vladitx/adsp2181/ (be careful, the page works randomly) (disassemble the main program code, but there are some failure (added instruction ???). Also we need to check if the asm code makes sense)Yes, the disassembler does not implement everything. Types 12,13,14 are missing. It should be easy to add them, but the license is unknown. Benoît (that have nothing to do and is a specialist of communication ;) ) could do it. He could also find people that want to write dsp software...
the disclaimer of the mainpage say : Of course I could have pasted here some general disclaimer, but I'll state it simply: Use all of the contents of this site (including, but not limited to source code and executable software, data files, picture files, ideas, principles, etc.) at YOUR OWN RISK. Do whatever you like with the content. Download it, print it, burn it - whatever you like. Just don't whine about obliterated HDDs or late projects. You have been warned.
- tool chain for adsp : http://www.bdti.com/faq/3.htm#33 (very old gcc : 2.3.3 !!!) (some links are not working anymore :( )
Example of a firmware image
DSP Informations
Page Count: 40
Page 1 at offset 0x00019de6
Block Count 2
Block 0 Address 0x4020 Data ExtSize 496
Block 1 Address 0x2000 Program ExtSize 15825
Page 2 at offset 0x0001ddb4
Block Count 2
Block 0 Address 0x4020 Data ExtSize 4914
Block 1 Address 0x2000 Program ExtSize 19848
Page 3 at offset 0x00023e7b
Block Count 2
Block 0 Address 0x4020 Data ExtSize 3466
Block 1 Address 0x2000 Program ExtSize 24567
Page 4 at offset 0x0002ac09
Block Count 2
Block 0 Address 0x4020 Data ExtSize 7816
Block 1 Address 0x16d0 Program ExtSize 29466
Page 5 at offset 0x00033db8
Block Count 2
Block 0 Address 0x4020 Data ExtSize 6354
Block 1 Address 0x2000 Program ExtSize 19827
Page 6 at offset 0x0003a40a
Block Count 2
Block 0 Address 0x4020 Data ExtSize 288
Block 1 Address 0x2000 Program ExtSize 1233
Page 7 at offset 0x0003aa08
Block Count 1
Block 0 Address 0x2000 Program ExtSize 30
Page 8 at offset 0x0003aa2d
Block Count 2
Block 0 Address 0x4020 Data ExtSize 4020
Block 1 Address 0x2000 Program ExtSize 22800
Page 9 at offset 0x00000000
Page 10 at offset 0x000412fe
Block Count 2
Block 0 Address 0x4020 Data ExtSize 1384
Block 1 Address 0x2000 Program ExtSize 4359
Page 11 at offset 0x0004297a
Block Count 2
Block 0 Address 0x4020 Data ExtSize 8332
Block 1 Address 0x16d0 Program ExtSize 31089
Page 12 at offset 0x0004c384
Block Count 2
Block 0 Address 0x4020 Data ExtSize 3976
Block 1 Address 0x2000 Program ExtSize 21909
Page 13 at offset 0x000528ae
Block Count 2
Block 0 Address 0x4020 Data ExtSize 7186
Block 1 Address 0x2200 Program ExtSize 12081
Page 14 at offset 0x000573fe
Block Count 2
Block 0 Address 0x4020 Data ExtSize 2636
Block 1 Address 0x2000 Program ExtSize 1323
Page 15 at offset 0x00058382
Block Count 2
Block 0 Address 0x4020 Data ExtSize 2288
Block 1 Address 0x2000 Program ExtSize 10008
Page 16 at offset 0x0005b397
Block Count 2
Block 0 Address 0x4020 Data ExtSize 958
Block 1 Address 0x2000 Program ExtSize 18807
Page 17 at offset 0x000600d9
Block Count 2
Block 0 Address 0x4020 Data ExtSize 7470
Block 1 Address 0x16d0 Program ExtSize 26307
Page 18 at offset 0x000684d7
Block Count 2
Block 0 Address 0x4020 Data ExtSize 1742
Block 1 Address 0x16d0 Program ExtSize 23427
Page 19 at offset 0x00000000
Page 20 at offset 0x0006e735
Block Count 2
Block 0 Address 0x4020 Data ExtSize 60
Block 1 Address 0x2000 Program ExtSize 2658
Page 21 at offset 0x00000000
Page 22 at offset 0x00000000
Page 23 at offset 0x00000000
Page 24 at offset 0x00000000
Page 25 at offset 0x00000000
Page 26 at offset 0x00000000
Page 27 at offset 0x00000000
Page 28 at offset 0x00000000
Page 29 at offset 0x00000000
Page 30 at offset 0x0006f1e0
Block Count 2
Block 0 Address 0x4020 Data ExtSize 8494
Block 1 Address 0x2000 Program ExtSize 16347
Page 31 at offset 0x000752f6
Block Count 2
Block 0 Address 0x4020 Data ExtSize 5258
Block 1 Address 0x2000 Program ExtSize 9468
Page 32 at offset 0x00000000
Page 33 at offset 0x00000000
Page 34 at offset 0x00000000
Page 35 at offset 0x00000000
Page 36 at offset 0x00000000
Page 37 at offset 0x00000000
Page 38 at offset 0x00000000
Page 39 at offset 0x00000000
Page 40 at offset 0x00078c89
Block Count 1
Block 0 Address 0x2000 Program ExtSize 20889
Main Page at offset 0x000101e5
Block Count 13
Block 0 Address 50f6 Data Size 1533
Block 1 Address 56f3 Data Size 1533
Block 2 Address 5cf0 Data Size 1488
Block 3 Address 63ca Data Size 566
Block 4 Address 6d00 Data Size 1200
Block 5 Address 7541 Data Size 1533
Block 6 Address 7b3e Data Size 1081
Block 7 Address 3fe Program Size 1022
Block 8 Address 7fc Program Size 1022
Block 9 Address bfa Program Size 1022
Block 10 Address ff8 Program Size 1022
Block 11 Address 13f6 Program Size 549
Block 12 Address 0 Program Size 1022
Firmware is sended to DSP it two stages
- load main program (pageno eq 0), run CPU
- load additional data/program pages at DSP request
The second stage is needed because DSP have limited memory
Example of a DSP firmware upload:
block_info wOvl, wOvlOffset, wAddress, wSize
ovl = 0x0000, pageno = 0
ovl 0x0000 off 0x8000 addr 0x50f6 size 3066
ovl 0x0000 off 0x8000 addr 0x56f3 size 3066
ovl 0x0000 off 0x8000 addr 0x5cf0 size 2976
ovl 0x0000 off 0x8000 addr 0x63ca size 1132
ovl 0x0000 off 0x8000 addr 0x6d00 size 2400
ovl 0x0000 off 0x8000 addr 0x7541 size 3066
ovl 0x0000 off 0x8000 addr 0x7b3e size 2162
ovl 0x0000 off 0x8000 addr 0x03fe size 3114
ovl 0x0000 off 0x8000 addr 0x07fc size 3114
ovl 0x0000 off 0x8000 addr 0x0bfa size 3114
ovl 0x0000 off 0x8000 addr 0x0ff8 size 3114
ovl 0x0000 off 0x8000 addr 0x13f6 size 1673
ovl 0x0000 off 0x8000 addr 0x0001 size 3111
ovl 0x0000 off 0x8000 addr 0x0000 size 3
ovl = 0x0444, pageno = 10
ovl 0x0444 off 0x8444 addr 0x4020 size 1384
ovl 0x0444 off 0x8444 addr 0x2000 size 4428
ovl = 0x0040, pageno = 20
ovl 0x0040 off 0x8040 addr 0x4020 size 60
ovl 0x0040 off 0x8040 addr 0x2000 size 2700
ovl = 0x0444, pageno = 1
ovl 0x0444 off 0x8444 addr 0x4020 size 496
ovl 0x0444 off 0x8444 addr 0x2000 size 16076
ovl = 0x0040, pageno = 12
ovl 0x0040 off 0x8040 addr 0x4020 size 3976
ovl 0x0040 off 0x8040 addr 0x2000 size 22256
ovl = 0x0444, pageno = 1
ovl 0x0444 off 0x8444 addr 0x4020 size 496
ovl 0x0444 off 0x8444 addr 0x2000 size 16076
ovl = 0x0040, pageno = 18
ovl 0x0040 off 0x8040 addr 0x4020 size 1742
ovl 0x0040 off 0x8040 addr 0x16d0 size 23798
ovl = 0x0444, pageno = 13
ovl 0x0444 off 0x8444 addr 0x4020 size 7186
ovl 0x0444 off 0x8444 addr 0x2200 size 12272
ovl = 0x0040, pageno = 2
ovl 0x0040 off 0x8040 addr 0x4020 size 4914
ovl 0x0040 off 0x8040 addr 0x2000 size 20163
ovl = 0x0444, pageno = 15
ovl 0x0444 off 0x8444 addr 0x4020 size 2288
ovl 0x0444 off 0x8444 addr 0x2000 size 10166
ovl = 0x0444, pageno = 15
ovl 0x0444 off 0x8444 addr 0x4020 size 2288
ovl 0x0444 off 0x8444 addr 0x2000 size 10166
ovl = 0x0040, pageno = 17
ovl 0x0040 off 0x8040 addr 0x4020 size 7470
ovl 0x0040 off 0x8040 addr 0x16d0 size 26724
ovl = 0x0444, pageno = 8
ovl 0x0444 off 0x8444 addr 0x4020 size 4020
ovl 0x0444 off 0x8444 addr 0x2000 size 23161
ovl = 0x0040, pageno = 3
ovl 0x0040 off 0x8040 addr 0x4020 size 3466
ovl 0x0040 off 0x8040 addr 0x2000 size 24956
ovl = 0x0444, pageno = 16
ovl 0x0444 off 0x8444 addr 0x4020 size 958
ovl 0x0444 off 0x8444 addr 0x2000 size 19105
ovl = 0x0040, pageno = 11
ovl 0x0040 off 0x8040 addr 0x4020 size 8332
ovl 0x0040 off 0x8040 addr 0x16d0 size 31582
ovl = 0x0444, pageno = 40
ovl 0x0444 off 0x8444 addr 0x2000 size 21220