| ARM Technical Support Knowledge Articles | |
Applies to: ARM1020/22E, ARM1026EJ-S, ARM1136, ARM720T, ARM7EJ-S, ARM7TDMI, ARM7TDMI-S, ARM920/922T, ARM926EJ-S, ARM940T, ARM946E-S, ARM966E-S, ARM968E-S, ARM9TDMI
Applies to: All Processor Cores
The recommended JTAG ID code complies with the IEEE JTAG standard which defines 4 fields within the 32-bit code.
31 | 28 | 27 | 12 | 11 | 1 | 0 |
Version | Part Number | Manufacturer ID | Marker | |||
Marker [0] (Always '1')
Manufacturer ID [11:1] (11 bits)
You should set this to the JEDEC Manufacturer ID code to correspond to your particular company/implementation.
Version [31:28] (4 bits)
The top nibble (Version) is the core revision e.g. rev0 = 0x0, rev1 = 0x1, rev2 - 0x2 etc.
Part Number [27:12] (16 bits)
The Part Number field is arbitrary and Multi-ICE uses it to autodetect the device type so we have developed some general rules so that we can predict in advance what the ID codes will be for various devices:
ARM defines 2 types of device ID. They are distinguished by the top bit.
1. ARM core ID. Top bit is 0
(This example is an ARM966E-S)
Part No. | 0 | 101 | 1001 | 0110 | 0110 |
ARM Core ID | Capability Bits | Family | Device Number | ||
ARM Core ID [27]
ARM Core ID set to '0' denotes that the device is an ARM processor core.
Capability Bits [26:24] (3 bits)
The capability bits hold certain details about the processor core. These details are the E extension, whether the processor is a hard or soft macrocell and if it has Jazelle extensions.
When the ARM core ID bit [27] and the capability bits [26:24] are combined, the interpretation is as follows:
27 | 26 | 25 | 24 | Description |
0 | 0 | 0 | 0 | ARM Processor pre E extension - hard macrocell |
0 | 0 | 0 | 1 | ARM Processor pre E extension - soft macrocell |
0 | 0 | 1 | X | Reserved |
0 | 1 | 0 | 0 | ARM processor with E extension - hard macrocell |
0 | 1 | 0 | 1 | ARM processor with E extension - soft macrocell |
0 | 1 | 1 | 0 | ARM Processor with J extension - hard macrocell |
0 | 1 | 1 | 1 | ARM Processor with J extension - soft macrocell |
1 | 0 | 0 | 0 | Reserved |
1 | 0 | 0 | 1 | Not a recognised executable ARM device (1) |
1 | 0 | 1 | 0 | Reserved |
1 | 0 | 1 | 1 | ARM Trace Buffer (2) |
1 | 1 | 0 | 0 | Reserved |
1 | 1 | 0 | 1 | Reserved |
1 | 1 | 1 | 0 | Reserved |
1 | 1 | 1 | 1 | Not a recognised executable ARM (1) |
Family [23:20] (4 bits)
0x7 = ARM7, 0x9 = ARM9, 0xA = ARM10 etc.
Example : 1001 = 0x9 = ARM9
Device Number [19:12] (8 bits)
01100110 = 0x66
For an ARM9TDMI this gives 0x0900.
Some TAP ID codes
Here is a list of some popular TAP ID codes. Replace 'r' with the revision and 'mmm' with the manufacturer code.
Some tools ignore the manufacturer code when identifying ARM core IDs, as the same ARM core may be manufactured by many manufacturers.
2. ARM Test Chip ID. Top bit is 1
Part No. | 1 | aaa aaaa | bbbb bbbb |
Non ARM ID | Assigned by ARM | Assigned by customer |
This is used for separate boundary scan TAP controllers that are put in ARM test chips.
However, this is not mandatory and there are many circumstances where it will be necessary to use alternative codes.
Non-ARM TAP ID Codes
The customer is free to assign the entire 16 bits according to their own requirements and preferences. However, it may be beneficial to avoid the specific patterns listed above for particular ARM cores, to prevent software from falsely identifying the non-ARM core as an ARM core.
See also:
Article last edited on: 2008-09-09 15:47:38
Did you find this article helpful? Yes No
How can we improve this article?