Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
930239e38This file is pinned to the selected release. Download the original to open it in your design tool.
from pyocd.core.target import Target
class MacAddressReader():
MEMORY_ADDRESS = 0x100000A4
def __init__(self, target: Target) -> None:
self.target = target
def get_static_mac_address(self) -> str:
'''
Reads the static mac address assigned by the manufacturer.
This chip property is readonly and may be different from the mac address in the application code.
'''
memory_blocks = self._get_blocks()
return self._convert_blocks(memory_blocks)
def _get_blocks(self):
memory_blocks = self.target.read_memory_block32(self.MEMORY_ADDRESS, 2)
return memory_blocks
def _convert_blocks(self, memory_blocks: list[int]) -> str:
first_block = f'{memory_blocks[0]:x}'.rjust(8, '0')
modified_second_block = memory_blocks[1] | 0xc000 # Bitwise OR
second_block = f'{modified_second_block:x}'
mac_string = (second_block[4:] + first_block)
prettified_mac = ':'.join(mac_string[i:i+2] for i in range(0, len(mac_string), 2))
return prettified_mac.upper()