I have a hopefully quick, newbie question:
I have code up and running on my ADSP-21262 EZ-kit, and I'm currently designing my own board based on the EZ-kit schematic. My question is how to cheaply and easily interface VisualDSP++ to my circuit design so I can do in-circuit flash programming.
I read EE-223 and EE-68, and I'm still not quite understanding what hardware is required.
My options as I believe them to be now are:
1) bypass the DSP and hook up the flash to a third party JTAG. Generate some assembly code out of VisualDSP and use a third party USB JTAG programmer to program the flash directly.
2) hook the memory up only to the DSP and have the DSP handle the programming through JTAG. What is the cheapest/easiest way to do this over USB? It seems like the USB circuitry on the EZ-kit is not an option for my circuit design (proprietary, correct?), so I'd have to use JTAG as specified in EE-68 (?). I could potentially(?) generate assembly in VisualDSP, and buy a third party USB JTAG Programmer, and try to jury-rig the JTAG port as it's described in EE-68. Can someone give me a few suggestions as to typical best practices here?
Any help is really greatly appreciated- I'm just out of school and new to all of this (first embedded circuit design). I'm having a fair amount of trouble figuring out how to push my program to the hardware, and cost is the #1 issue. Thanks for the help!!
Thanks for the quick reply. I take it from your post that my best option is to just hook up the flash directly to the DSP and use JTAG as specified in EE68.
I saw the Danville Programmer when I was doing my initial research, but as a recent grad doing my this project at home, $750 is way, way out of my league. The development kit I'm using is one I had for a research project at college.
So here's my follow-up question (another newbie one)- if JTAG is the only way to program it on the board, can I use any JTAG emulator that says it conforms to IEEE 1149.1? Is there a good reference where I can understand this better?
I'd really like to hook this up to my computer instead of using a flash programmer/DIP socket to make my board reprogrammable (which is important). I'm looking to keep the interfacing components under $100 though (which I can easily do with DIP flash programming and a socket, even though it's not elegant).
Would something like this work: http://www.digilentinc.com/Products/Detail.cfm?Prod=JTAG-USB ?
Thanks for the help,
The built in USB is not an option for your board. You still need to program the flash at least once to use a USB interface. On our COTS boards we do provide a USB programming capability, but this works because we pre-program the flash first. Aside from JTAG, the only common alternative is to preprogram the flash before the parts are soldered onto your board.
I would design your board according to EE-68. Make sure you keep the connections reasonably short. DO NOT MAKE SIMPLE JURY RIGGED CABLES. Signal Integrity counts with JTAG.
You can use the larger ADI specified 0.100 header or alternatively, you might use a 2mm dual row header to save space. We use a 2x8 header for this purpose. Use the same pin definitions as ADI and leave Pins 15 & 16 open or you can tie them to Vd+3.3.
We have an adapter that converts this connector to the larger ADI.
DO NOT USE A PARALLEL FLASH! Use a standard 8 pin serial flash. An Atmel AT26DF041A is one choice. The ADSP-21262 cannot support CFI flash which now accounts for just about all parallel flash devices made today.
You can use a Danville Blackfin & SHARC Programmer for production programming. Check our support list for flash devices. If you just have a few boards, you can also use an ADI ICE. The ICE are great for development but not appropriate for production programming. You will wear out the ICE cable connector which is very expensive.
I think it might be useful to explain JTAG a liitle.
JTAG was originally conceived as a way to access the ports and connections of devices for testing. You can do boundary scan tests to check for shorts and opens, etc. Many devices support this functionality including ADI's DSPs. The use of JTAG for this purpose is fairly standardized and is documented by ADI.
JTAG operates like a giant shift register. In principle, you could write a file that could wiggle the flash pins to program a file. I think it would be a big project to write and know it would be incredibly slow.
The most common use for JTAG is as an emulator port. Each manufacturer uses this port to write to the internal workings of their processors or devices. The methods are all different and usually proprietary. In many respects, the ICE is part of the device. When JTAG is used this way, the processor is executing instructions that it received via JTAG. When we program flash with this method, it is actually the DSP that does the programming. This can be very efficient.
The various low cost JTAG devices do not have this capability. The reason the dspFlash is more money is that the software is costly to develop and maintain. It also has more sophisticated hardware (internal Blackfin & RAM, etc). It's also the reason an ICE is expensive. Unlike a board or devices, you can never sell a large number.
If you are only going to create a small number of boards, the socket is the cheapest route. The next question is why create a board? Is there an of the shelf solution or partial solution that makes more sense? Our dspbloks can be programmed via USB.
Thanks Al! I really appreciate all of the help. That definitely clarified quite a bit, and I now completely understand that JTAG is out of the question unless I have some $$ to spend... maybe when I start my own company one day I'll come back to this and invest in some actual infrastructure
Anyway, I've been googling diligently, and getting more and more disheartened about finding a solution in my budget. But, I just stumbled upon this and now I'm leaning this way:
Based on ADI's EE-231, I think SPI-Flash seems to be my best bet. I was thinking about trying to quickly build this: http://spiflash.org/block/1.html, which appears to support programming of the Atmel AT25DF081- which I think is the 8Mbit SPI sister chip of the one you mentioned. If that works, it seems like I could get surface mount versions of the programming ics/memory, and just design the programming circuit into the board as well. Does this seem like it should work to you?
I'm actually trying to build a car amp with DSP in the chain. I'd like to be able to hack into it and change EQ, delay, compression, etc and other processing for several channels without taking the thing apart. I have my power amps/codecs picked out and the rest of the circuitry pretty well understood, and this is the one thorn stopping me. The point for me is to have something that could be a permanent fixture in the car, hooked into the car audio system, and still programmable via usb while I sit inside without ripping everything out. Since the heatsinking is pretty monstrous and the enclosure should ideally be mounted, I'd like to have a convenient way to access it. So to answer your question, it's part learning experience and part full out project, but I really want to design my own board, and I think for the application it makes sense- I basically want a car test-bed, where I can tweak and change things and really try to tune the car on my own. I could buy off the shelf amps and just try to hook up the development kit, but that's really only step one, and my development kit has single ended inputs which will be really susceptible to transmission noise. Buying another kit is too expensive and not nearly as fun!
In any case, thanks again for the help Al! I really appreciate it.