Open main menu

DAVE Developer's Wiki β

Changes

DESK-MX8M-L/Deployment/MAC Address programming

1,293 bytes added, 18:21, 27 December 2023
no edit summary
!colspan="4" style="width:100%; text-align:left"; border-bottom:solid 2px #ededed"|History
|-
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Version
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Issue Date
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Notes
|-
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|1.0.0{{oldid|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"16739|Jun 2022/07/01}}|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|First DESK-MX8M-L release
|-
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |2023/08/24
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |DESK-MX8M-L-4.0.0 release
|}
<section end=History/>
__FORCETOC__
__FORCETOC__
<section begin=Body/>
The MAC address is a six-pair set of hexadecimal numbers, for example <code>a1-c2-e3-44-5f-6d</code>. Specifically, in Ethernet, the MAC address is known as the Ethernet Address, which is the unique ID serial number of the Ethernet device in one's computer. MAC Addresses are used in a Local Area Network (LAN) by computers to communicate with each other. Every adapter has a unique MAC address.
=== Platform supported===In this Application Note, we will describe how to use the i.MX8M eFuse for programming and using the MAC address(es)and it applies to the following DAVE <code>i.MX8M family</code> products:* [[ORCA SOM | ORCA]]* [[MITO 8M SOM | MITO8M]]* [[MITO 8M Mini SOM| MITO 8M Mini]] {{ImportantMessage|text=This Application Note has been validated in the [[ORCA SOM | ORCA SOM]]. The commands used have been not validated in the other platform yet.}}
=== Obtaining a MAC address ===
eth0: ethernet@30be0000
If the <code>ethaddr</code> is set and saved in the u-boot environment, it's its value is used as the MAC Address:
u-boot=> setenv ethaddr 00:50:C2c2:1E1e:AFaf:CBa8
u-boot=> saveenv
Saving Environment to MMC... Writing to MMC(1)... OK
The related HW_OCOTP_MAC_ADDR0, HW_OCOTP_MAC_ADDR1, HW_OCOTP_MAC_ADDR2 OTP registers will be used for the purposes illustrated in this AN.
 
{{ImportantMessage|text='''Warning!!''' eFuse programming is a permanent and non reversible action. Pay attention to the values and commands used during MAC programming.}}
==== eth0 eFuse programming ====
 
U-Boot uses the <code>fuse prog</code> command for writing the MAC address into the eFuse. The MAC address should be divided in high 16 bit and low 32 bits, for example MAC address <code>AB:CD:12:34:56:78</code> for eth0 is then divided into :
</pre>
In the following example the MAC address <code>00:50:c2:1e:af:cda8</code> is stored in the SOC:
* (in case of presence) clear the <code>ethaddr</code> u-boot variable
<pre class="workstation-terminal">
* program the MAC address in the OPTs with the following commands:
<pre class="workstation-terminal">
u-boot=> fuse prog 9 0 c21eafcdc21eafa8Programming bank 9 word 0x00000000 to 0xc21eafcd0xc21eafa8...
Warning: Programming fuses is an irreversible operation!
This may brick your system.
<pre>
u-boot=> fuse prog -y 9 0 c21eafcdc21eafa8
u-boot=> fuse prog -y 9 1 0050
</pre>
Hit any key to stop autoboot: 0
u-boot=> print ethaddr
ethaddr=00:50:c2:1e:af:cda8
u-boot=>
</pre>
For the second ethernet interface, the above procedure should be repeated in a similar way, except of ''the correct ''eFuse register should be used'':
The MAC address should be divided in ''low'' 16 bit and ''high'' 32 bits, for example MAC address <code>00:50:c2:1e:af:cea9</code> is stored in the SOC using:
<pre>
fuse prog -y 9 1 afce0000afa90000
fuse prog -y 9 2 0050c21e
</pre>
==== eFuse locking ====
The OTP eFuse registers should be locked in order to avoid unwanted registers (and then MAC addresses) modifications. OTP lock grants the MAC values cannot be modified anymore.
 
{{ImportantMessage|text=If not locked yet, OTP bits can be set to ''''1'''' but not reversed to ''''0'''' value, so some modifications can be applied if the eFuse registers are not locked.
 
For more information see, for example, the [https://www.nxp.com/webapp/Download?colCode=IMX6SDLRM i.MX6 Dual Lite Reference Manual chap. 47.3.1.3] }}
The two MAC addresses - even if sharing register <code>bank:9 word:1</code> - can be programmed at different times.
<pre>
fuse prog -y 0 0 c000
</pre>
 
==== eFuse reading ====
The eFuse registers can be read - after programming - for checking the written values:
 
<pre class="workstation-terminal">
u-boot=> fuse read 9 0
Reading bank 9:
 
Word 0x00000000: c21eafa8
u-boot=> fuse read 9 1
Reading bank 9:
 
Word 0x00000001: afa90050
u-boot=> fuse read 9 2
Reading bank 9:
 
Word 0x00000002: 0050c21e
u-boot=>
</pre>
<pre class="workstation-terminal">
root@desk-mx8mp:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:c2:1e:af:cda8
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
eth1 Link encap:Ethernet HWaddr 00:50:c2:1e:af:cea9
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
8,186
edits