FlashcatUSB Professional can be used to program a parallel NOR flash that is connected to a MCU, CPLD, or FPGA with a JTAG interface. This can be accomplished by using a little-known process called 'boundary scan programming', where the JTAG host controller puts the target device into an interconnect test (EXTEST) mode and continually updates all of the pins on the device to “simulate” the NOR programming interface.
The benefits of using this feature is that the external hardware does not need any special configuration or specific JTAG registers in order to program the memory and is considered the most versatile and universal method. However there are drawbacks. First, data transfer speeds are going to be slow. For example, with the JTAG clock set to 20MHz you should expect a read speed of 5KB/s and a write speed of 2.5KB/s.
To use this feature, first you need to obtain the 'Target' BSDL file. This is a plain-text file that describes all of the physical pins for a particular IC and all of the internal pins and registers.
In the BSDL file, look for the line “attribute BOUNDARY_LENGTH” and at the end of this it will say “entity is <NUMBER>; This number is the number of bits that the boundary scan register is.
Next, the file will then list all of the bits in the boundary scan register, starting with the bit index and then several parameter. The second parameter will be the pin description. Using this, you need to make a map of all the pins that connect to the Flash.
A typical NOR flash will have address pins, data pins, and control pins. You need to correctly create a list of all the pin indexes that are associated with the NOR flash pins.
For example, a 2mbit bootrom will have 20 address pins (labeled AD0 to AD19), 16 data pins (labeled DQ0 to DQ16) and 6 control pins labeled CE# (chip-enable), OE# (output-enable), WE# (write-enable), BYTE# (Byte/Word select), WP# (write-protect), and RESET#. RB# is also listed but you can ignore that as its not used. Some PCB designs may hardwire CE# to GND and RESET# and WP# to VCC, in which case you can ignore those too. But if they are wired to the Target IC, you need to include them. Note: datasheets will often vary on the pin terminology, some might use G instead of OE, A0 instead of AD, D0 instead of DQ0, etc.
With a map of all the TAGET IC pins to the NOR FLASH pins, you need to create a text file (and name it with the .FCS extension indicating it is a FlashcatUSB script file) and put the following script commands:
BoundaryScan.Setup(664)
BoundaryScan.AddPin(331, "DQ0")
BoundaryScan.AddPin(259, "DQ1")
….
BoundaryScan.Detect()
The BoundaryScan.Setup command inputs the total number of bits of the boundary scan register (BSR). This is the number you got early from the BSDL file.
The BoundaryScan.AppPin command specifies which BSR bit is associated with each NOR FLASH pin. Make sure you use these pin terminology:
Data pins: “DQ0” – “DQ15” (note: for X8 devices, only specify up to DQ7)
Address pins: “AD0” – “AD25” (note: you only need specify up to the number of address pins you will use)
Control pins: “WE#”, “OE#”, “BYTE#”, “WP#”, “RESET#”, “CE#”
Finally the BoundaryScan.Detect command will initiate the software and attempt to detect the NOR flash, if it is successful, you will see this:
Enclosed is an actual BSDL file for the LCMXO2 and the sample script used to create the above memory interface.
As you can see, it took approx. 1 hour to program a 8MB file. So this is only a viable solution if there is no other way.
The benefits of using this feature is that the external hardware does not need any special configuration or specific JTAG registers in order to program the memory and is considered the most versatile and universal method. However there are drawbacks. First, data transfer speeds are going to be slow. For example, with the JTAG clock set to 20MHz you should expect a read speed of 5KB/s and a write speed of 2.5KB/s.
To use this feature, first you need to obtain the 'Target' BSDL file. This is a plain-text file that describes all of the physical pins for a particular IC and all of the internal pins and registers.
In the BSDL file, look for the line “attribute BOUNDARY_LENGTH” and at the end of this it will say “entity is <NUMBER>; This number is the number of bits that the boundary scan register is.
Next, the file will then list all of the bits in the boundary scan register, starting with the bit index and then several parameter. The second parameter will be the pin description. Using this, you need to make a map of all the pins that connect to the Flash.
A typical NOR flash will have address pins, data pins, and control pins. You need to correctly create a list of all the pin indexes that are associated with the NOR flash pins.
For example, a 2mbit bootrom will have 20 address pins (labeled AD0 to AD19), 16 data pins (labeled DQ0 to DQ16) and 6 control pins labeled CE# (chip-enable), OE# (output-enable), WE# (write-enable), BYTE# (Byte/Word select), WP# (write-protect), and RESET#. RB# is also listed but you can ignore that as its not used. Some PCB designs may hardwire CE# to GND and RESET# and WP# to VCC, in which case you can ignore those too. But if they are wired to the Target IC, you need to include them. Note: datasheets will often vary on the pin terminology, some might use G instead of OE, A0 instead of AD, D0 instead of DQ0, etc.
With a map of all the TAGET IC pins to the NOR FLASH pins, you need to create a text file (and name it with the .FCS extension indicating it is a FlashcatUSB script file) and put the following script commands:
BoundaryScan.Setup(664)
BoundaryScan.AddPin(331, "DQ0")
BoundaryScan.AddPin(259, "DQ1")
….
BoundaryScan.Detect()
The BoundaryScan.Setup command inputs the total number of bits of the boundary scan register (BSR). This is the number you got early from the BSDL file.
The BoundaryScan.AppPin command specifies which BSR bit is associated with each NOR FLASH pin. Make sure you use these pin terminology:
Data pins: “DQ0” – “DQ15” (note: for X8 devices, only specify up to DQ7)
Address pins: “AD0” – “AD25” (note: you only need specify up to the number of address pins you will use)
Control pins: “WE#”, “OE#”, “BYTE#”, “WP#”, “RESET#”, “CE#”
Finally the BoundaryScan.Detect command will initiate the software and attempt to detect the NOR flash, if it is successful, you will see this:
Enclosed is an actual BSDL file for the LCMXO2 and the sample script used to create the above memory interface.
As you can see, it took approx. 1 hour to program a 8MB file. So this is only a viable solution if there is no other way.