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 fit in the context like "...each sub-ip will have a set of integration straps..."
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?
(BTW, I will keep collecting more snippet to show more context.)
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?