# What does "strap" mean in low-level hardware programming?

I see the word "strap" in some low-level hardware programming document from time to time. For example:

...to check if these straps are consistently programmed... if not then firmware re-programs the straps...

...currently this IP doesn’t have this mapping register but have a strap to program the target ID...

...each sub-ip will have a set of integration straps and it is SoC team’s responsibility to provide proper strap value per sub-ip...

AFAIK, the interface between hardware and software are registers. So software should interact with hardware through registers.

I looks up the word "strap" in dictionary and it says something like "a strip to bind things together", which seems not quite fit in such context.

So what does "strap" mean?

Thanks!

## ADD 1 - 8:54 PM 2/24/2021

Below are some of my thought.

Software/firmware runs in some processor (probably but not necessarily CPU). Software can only use the ways supported by the processor architecture to interact with the platform/board. For example, for X86 processor, software can leverage memory access or IO access, which use memory address space and IO address space respectively. From above quotations, a strap seems different from a register.

If it is not a register, what is it?

And how is it accessed by software/firmware? Is it also accessed through memory or IO addresses in the context of X86 architecture?

## ADD 2 - 4:33 PM 2/25/2021

I had some discussion with some of my colleagues, they say straps are some non-volatile storage, and ultimately CPLD or fuse. They can be accessed indirectly through some IP's interface. We communicate with some delegate IP, and this IP's firmware will access the strap/CPLD for us.

From here, I see this:

HDD Status : 0A30
MEFW Version : 6.0.50.1244
System Straps : 00000F00 BE036FF1 B2EB6E8F <--------------------Straps!
Hardware Anchor : F01001R06.0116f365a2012-07-17
Certificate : 946944F17906C95E


It seems straps are just another name of some system stored value.

But why call it strap rather than some more explicit name?

• smwikipedia - Hi, Please can you add a link to the document(s) you are quoting? This might be terminology specific to those devices. I haven't seen the word "strap" used in that way, as a kind of programmable connection. Thanks. Feb 24, 2021 at 1:58
• FWIW, I've occasionally seen "strap" used to mean "directly connected to VCC or ground" (cf. "pull" which usually involves a resistor). e.g. "The /FOO pin should be strapped to ground." Feb 24, 2021 at 3:10
• @SamGibson Thanks. But this is some proprietary document so I cannot share the full text. I will try to share more snippet. Feb 24, 2021 at 3:52
• @AlexHajnal - Hi, Yes that's exactly what I usually see when the word "strap" is used, but that's not a programmable connection as the quoted text states. We can guess the intended meaning, but this might be manufacturer-specific jargon. Feb 24, 2021 at 15:01
• Your quote "this IP" suggests that this is some type of core that can be instantiated inside of an FPGA. In that case, there may be a separate dedicated logic input port for these "strapped" values, instead of using the normal register interface. Feb 24, 2021 at 15:15

The term has been used in different ways but typically means a setting (one or more bits) that could be implemented as a latch, switch, jumper etc. in the early days it might have been a wire with a banana plug on each end. My assumption is that it derives from electrical engineering where one would strap something to ground by attaching a metal strap around a water pipe.

Fused links or jumpers or "soft, firm or hard" registers are "straps" to indicate status with logic levels, such as read by BIOS for configuration of RAM and may be hard-coded in flash memory.

• Thanks! Could you elaborate more about "soft, firm or hard" registers? I have always been thinking registers as hardware. Feb 25, 2021 at 8:44
• Think software, firmware, hardware but not cash Feb 25, 2021 at 8:45
• I have seen registers created from various gates. I cannot image how software or firmware can create registers. Or am I imaging the wrong way? Or I mis-interpreted the concept of "register" ? Feb 25, 2021 at 8:58
• btw, I am not a native English speaker. But how could it be related to cash (I mean in the sense of money)? Feb 28, 2021 at 3:27
• Not Cash registers (Lol) Feb 28, 2021 at 4:52

The slightly more elaborate and concise term is "configuration strap", a method of configuring a device by pulling a pin up or down, for instance to override its internal default pull-up/down.

To "strap" means, in general, to fasten or secure in a specified place or position with a belt. In our case that could be to configure at a specified voltage level with a resistor or a DIP switch.

You may be more familiar with the related term "to tie down" an input pin, whereby tying and strapping have similar meanings.

CONFIGURATION STRAPS The configuration strap option is a hardware method to configure the switch where pull-up or pull-down resistors are used to set the logic level high or low on strapping pins of the switch. For example, the KSZ9896C has several strapping pins with internal weak pull-up or pull-down resistors which allow the switch to operate in the unmanaged mode. A user can add 1KΩ to 10KΩ external pull-up resistors on non-LED pins, or 750Ω to 1KΩ pull-down resistors on LED strapping pins to override the effect of the weak internal resistors. The strapping pins exhibit very high impedance when the device is in reset. They are internally sampled at the rising edge of the reset pin, RESET_N. Once the RESET_N pin is high, all of these pins become driven outputs. The user must be aware that the internal pull-up/pull-down resistors are weak. Therefore, if the application board uses any external pull-up or pull-down resistors, care must be taken. If an external processor is connected with a switch, the processor should also be checked for internal pull-ups or pull-downs, and it may be necessary to add an external resistor to reinforce the default internal resistor of the Microchip switch. The KSZ9xxx family’s datasheet lists all the strapping pins, their functionalities and default values.

Without seeing the full document (and perhaps not even then), only educated guesses remain about the exact implementation details (unless someone has experience with a device whose documentation used that exact jargon for a programmable connection, and can write an answer from that experience). As mentioned above, I have seen "strap" used only for physical connections outside a device.

From the snippet of text given, this seems similar to what Atmel do when they use the word "fuse" (really EEPROM, see also here) for a programmable setting, which isn't really what most people think of as a fuse!