Jekyll2021-08-21T15:59:38-05:00https://flit.github.io//feed.xmlnotes from flitSome blog with my name on it.Chris ReedSurveying MCU unique ID capabilities2020-06-06T00:00:00-05:002020-06-06T00:00:00-05:00https://flit.github.io//2020/06/06/mcu-unique-id-survey<p>As part of a work project, I recently took a survey of the embedded unique ID availability in common
MCUs, mostly Cortex-M devices, from different silicon vendors. In this case, I’m specifically
talking about unique IDs that are programmed by the silicon vendor on the tester.</p>
<p>Unique IDs are invaluable for many use cases. Probably the most common use is for network IDs,
such as an Ethernet MAC or wireless node ID. Some devices even name their unique ID(s) with this
purpose in mind. They can also be used for cryptographic protocols for binding to a given
device, as well as other purposes.</p>
<p>The MCUs I’ve worked on typically had 96- or 128-bit unique IDs, and so I naturally thought that
most MCUs would have similar IDs. It turns out this is incorrect, and the majority of devices
surveyed only have 64-bit IDs. Ideally, devices would have a 128-bit ID that is globally unique.
With a 64-bit ID, you can only be certain of uniqueness within the vendor or device family.</p>
<p>The most common construction of a unique ID that I’ve seen is closer to a serial number. Part of
the ID is formed from the wafer number and lot, the die coordinates, and possibly other manufacturing
data such as date and fab. If there are remaining bits in the ID, those can be set from either
an incrementing serial number, or a random value.</p>
<p>The NXP i.MX RT1064 is representative of this kind of ID. Its 64-bit ID is composed of these fields:</p>
<ul>
<li>LOT_NO_ENC[42:0]: 43-bit lot number</li>
<li>WAFER_NO[4:0]: 5-bit wafer number</li>
<li>DIE-Y-COORDINATE[7:0]: 8-bit Y coordinate</li>
<li>DIE-X-COORDINATE[7:0]: 8-bit X coordinate</li>
</ul>
<p>However, this form of unique ID is not the only. A few newer devices use crypographic-quality
random numbers for their unique ID. Or, like the NXP LPC55S69, use a UUID that is compliant with
RFC4122.</p>
<p>The point here is that you should be careful with expectations of embedded unique IDs. Depending
on the application, you may need to understand the scope of uniqueness. For instance, don’t expect
a 64-bit unique ID to be globally unique. And depending on the construction, it may not even be
unique between device families of the same vendor. Unfortunately, this information is not often
documented in the device’s reference manual. Talk to your FAE if you need more information (then
post a comment on the gist below to add to the survey!).</p>
<p>The results of this survey are saved as the gist embedded below. New devices will be added as time
permits. Comments with additions are welcome.</p>
<script src="https://gist.github.com/flit/c44980d20586460bb09b284c891f9ae6.js"></script>Chris ReedAs part of a work project, I recently took a survey of the embedded unique ID availability in common MCUs, mostly Cortex-M devices, from different silicon vendors. In this case, I’m specifically talking about unique IDs that are programmed by the silicon vendor on the tester.New MidiKeys version 1.9 release2020-02-23T00:00:00-06:002020-02-23T00:00:00-06:00https://flit.github.io//2020/02/23/new-midikeys-release<p><img src="/assets/images/midikeys_screen.png" alt="" /></p>
<p>After a decade-long lapse, there is finally a new release of MidiKeys. Aside from long wanting to
get a new release out, the primary motivator for this release was that the last MidiKeys release was
32-bit only and will no longer work on Catalina later. Thus, the new MidiKeys is a proper 64-bit
build.</p>
<p>There are also some new features included. The keyboard window is resizeable now. This was the
number one requested change, and has become even more important after over a decade of increasing
display sizes. Dark mode is supported, too. See the list below for the full set of changes.</p>
<p><a href="/projects/midikeys">MidiKeys project page</a></p>
<h3 id="version-19-changes">Version 1.9 changes</h3>
<ul>
<li>MidiKeys is now 64-bit compliant. (And no longer a universal binary.)</li>
<li>Minimum system version is 10.11.</li>
<li>Keys window is resizable (probably the most asked-for feature request).</li>
<li>Support for system dark mode, including a dark mode keyboard. A “force light keyboard” preference is visible to allow you to revert the keyboard to a traditional appearance.</li>
<li>Added Clear Stuck Keys command.</li>
<li>On systems with a trackpad or mouse that reports pressure, MidiKeys will send channel aftertouch when keys are clicked and held.</li>
<li>New “show C notes” feature that draws “Cn” where “n” is the octave (i.e., C3, C4, etc) on the keyboard.</li>
<li>Fixed an issue with key caps where certain keys like tab and delete were not shown; they will now appear as the standard key icons.</li>
<li>Changed version update feed URL to https.</li>
<li>Updated Sparkle and ShortcutRecorder frameworks to modern versions.</li>
</ul>Chris Reed