本文介绍在不开机的情况下读取蓝牙的mac地址,这里介绍两个平台,Nordic和Silicon Labs。
使用两种方法来实现
- Jlink Commander
- PyLink
一 通过Jlink Commander工具
1.1 通过Jlink Commander工具连接上目标板
选择当前芯片的型号
1.2. 使用mem命令查看mac地址
首先需要知道mac地址存储在芯片的哪个地址。
1.2.1 Nordic:
寄存器DEVICEADDRTYPE的第一个bit代表mac地址的类型,这里为1。DEVICEADDR[0]和DEVICEADDR[1]的低16bit代表了MAC地址,其中DEVICEADDR[1]的第15位应该或上DEVICEADDRTYPE的最低位。
最终的mac地址为 A6 A4 59 86 DB D4(54 | 80)
1.2.2 Silicon Labs
去掉中间两个字节FF FE就是搜索到的mac地址。
二 使用PyLink读取蓝牙Mac地址
import pylink
from enum import Enum
class DeviceType(Enum):
SILICON_LABS = 1
NORDIC = 2
if __name__ == '__main__':
# jlink的id号
serial_no = '440177536'
# 目标MCU的完整型号
device_no = 'EFR32BG21A010F512IM32'
# serial_no = '69664114'
# device_no = 'nRF52833_xxAA'
deviceType = DeviceType.SILICON_LABS
jlink = pylink.JLink()
# 打开Jlink
jlink.open(serial_no)
try:
# 连接上目标板
jlink.connect(device_no, verbose=True)
# Silicon Labs平台
if deviceType == DeviceType.SILICON_LABS:
# [210, 118, 4, 254, 255, 236, 134, 204]去掉[3] [4]其余的为mac地址有效字节
listSilicon = jlink.memory_read8(0x0FE08048, 8)
macSilicon = [0, 0, 0, 0, 0, 0]
macSilicon[0] = listSilicon[0]
macSilicon[1] = listSilicon[1]
macSilicon[2] = listSilicon[2]
macSilicon[3] = listSilicon[5]
macSilicon[4] = listSilicon[6]
macSilicon[5] = listSilicon[7]
strMacSilicon = '0x{:02x}:0x{:02x}:0x{:02x}:0x{:02x}:0x{:02x}:0x{:02x}'.format(macSilicon[5], macSilicon[4],
macSilicon[3], macSilicon[2],
macSilicon[1], macSilicon[0])
# 0x4003C094
mode = [0x00, 0x04]
setOut = [0x10]
# 点灯
jlink.memory_write8(0x4003C094, mode)
jlink.memory_write8(0x4003C0A0, setOut)
print strMacSilicon
elif deviceType == DeviceType.NORDIC:
# [166, 164, 89, 134, 219, 84, 61, 246, 255, 255, 255, 255, 255, 255, 255, 255]
listNordic = jlink.memory_read8(0x100000A4, 9)
macNordic = [0, 0, 0, 0, 0, 0]
macNordic[0] = listNordic[0]
macNordic[1] = listNordic[1]
macNordic[2] = listNordic[2]
macNordic[3] = listNordic[3]
macNordic[4] = listNordic[4]
if listNordic[6] & 0x01:
macNordic[5] = (listNordic[5] & 0x7F) | 0x80
else:
macNordic[5] = listNordic[5] & 0x7F
strMacNordic = '0x{:02x}:0x{:02x}:0x{:02x}:0x{:02x}:0x{:02x}:0x{:02x}'.format(macNordic[5], macNordic[4],
macNordic[3], macNordic[2],
macNordic[1], macNordic[0])
print strMacNordic
except:
print 'no device ! !'
jlink.close()