more jtag_examine() checks. catch errors during first 640 bits.
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 29 Jul 2008 14:58:04 +0000 (14:58 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 29 Jul 2008 14:58:04 +0000 (14:58 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@881 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/jtag/jtag.c

index 37e2a61ecf36717e347cd0cfe53c5e59c94c14c6..15a5900c41c2151b1c1adcf0bfb5a2bb4fe83848 100644 (file)
@@ -1371,7 +1371,26 @@ int jtag_examine_chain()
                        
                        if (idcode == 0x000000FF)
                        {
-                               /* End of chain (invalid manufacturer ID) */
+                               /* End of chain (invalid manufacturer ID) 
+                                * 
+                                * The JTAG examine is the very first thing that happens
+                                * 
+                                * A single JTAG device requires only 64 bits to be read back correctly.
+                                * 
+                                * The code below adds a check that the rest of the data scanned (640 bits)
+                                * are all as expected. This helps diagnose/catch problems with the JTAG chain
+                                * 
+                                * earlier and gives more helpful/explicit error messages.
+                                */
+                               for (bit_count += 32; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;bit_count += 32) 
+                               {
+                                       idcode = buf_get_u32(idcode_buffer, bit_count, 32);
+                                       if (idcode != 0x000000FF)
+                                       {
+                                               LOG_WARNING("Unexpected idcode after end of chain! 0x%08x", idcode);
+                                       }
+                               }
+                               
                                break;
                        }