通过Jlink和PyLink读取蓝牙mac地址--Nordic&silicon labs

本文介绍在不开机的情况下读取蓝牙的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地址

关于PyLink的介绍

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()

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值