Are there any special sequences or other requirements to get MAX10 to respond to JTAG ?
Our design has a MAX10 (10M16SCU) and we would like to program it with JBC for field updates. We have been unable to get the embedded player software to work.
For debug, we fell back to a simple test where we try to read the IDCODE. This works fine with the Altera tools, as well as a simple SVF we created. When we do this same sequence on our embedded process, there is no response from the device (TDO is always 0).
The SVF code that works is
STATE IDLE;
!
!Max 10 IDCODE
!
!SIR 10 TDI (006);
!RUNTEST IDLE 128 TCK ENDSTATE IDLE;
SDR 32 TDI (00000000) TDO (031830DD) MASK (FFFFFFFF);
(this was taken from an SVF generated by the Quartus tools). It works fine and TMS, TCK signals are as expected.
When we duplicate this sequence on our embedded processor, we get no response.
Sequence is
TMS=1 for 6 TCK (reset JTAG state to TLR)
TMS=0 for 1 TCK (move to RTI state)
TMS = 1 for 1 TCK( move to SELECT_DR)
TMS= 0 for 1 TCK ( move to CAPTURE_DR)
TMS = 0 for 1 TCK (move to SHIFT_DR)
TMS=0 for 31 TCK (shift out DR, stay in SHIFT_DR)
TMS=1 for 1 TCK (shift bit32 from DR, move to EXIT_DR)
TMS=1 for 1 TCK (move to UPDATE_DR)
TMS=1 for 1 TCK(move to RTI)
The JTAG works fine with all the Altera tools so we know the port is OK. The embedded CPU only takes control of the JTAG during programming, but are otherwise tri-state with pullups on TMS, TDI, and a pulldown on TCK. We have verified this.
Any ideas what could be wrong? Any help appreciated!