python 使用nrfutil

1.pip install nrfutil

2. 在命令行中直接使用

3.自己封装一个函数使用

import os
import sys
import logging
sys.path.append(os.getcwd())

from nordicsemi.dfu.dfu import Dfu
from nordicsemi.dfu.dfu_transport import DfuEvent
from nordicsemi.dfu.dfu_transport_serial import DfuTransportSerial
from pc_ble_driver_py.exceptions import NordicSemiException
from nordicsemi.lister.device_lister import DeviceLister

logger = logging.getLogger(__name__)

def ble_driver_init(conn_ic_id):
    global BLEDriver, Flasher, DfuTransportBle
    from pc_ble_driver_py import config
    config.__conn_ic_id__ = conn_ic_id
    from pc_ble_driver_py.ble_driver    import BLEDriver, Flasher
    from nordicsemi.dfu.dfu_transport_ble import DfuTransportBle


class nrfutil():

    def __init__(self, package,port):
        self.package = package
        self.port = port
    

    def update(self):
        self.dfu.dfu_send_images()  
        print("Device programmed.")
    
    def do_serial(self, connect_delay = None, flow_control = None, packet_receipt_notification = None, baud_rate = None, serial_number = None, ping = None,
                  timeout = 1 ,update_progress = None):
    
        if flow_control is None:
            flow_control = DfuTransportSerial.DEFAULT_FLOW_CONTROL
        if packet_receipt_notification is None:
            packet_receipt_notification = DfuTransportSerial.DEFAULT_PRN
        if baud_rate is None:
            baud_rate = DfuTransportSerial.DEFAULT_BAUD_RATE
        if ping is None:
            ping = False
        if self.port is None:
            device_lister = DeviceLister()
            device = device_lister.get_device(serial_number=serial_number)
            if device is None:
                raise NordicSemiException("A device with serial number %s is not connected." % serial_number)
            self.port = device.get_first_available_com_port()
            logger.info("Resolved serial number {} to port {}".format(serial_number, self.port))
    
        if timeout is None:
            timeout = DfuTransportSerial.DEFAULT_TIMEOUT
    
        logger.info("Using board at serial port: {}".format(self.port))
        serial_backend = DfuTransportSerial(com_port=str(self.port), baud_rate=baud_rate,
                                            flow_control=flow_control, prn=packet_receipt_notification, do_ping=ping,
                                            timeout=timeout)
        serial_backend.register_events_callback(DfuEvent.PROGRESS_EVENT, update_progress)
        self.dfu = Dfu(zip_file_path = self.package, dfu_transport = serial_backend, connect_delay = connect_delay)
        return self.dfu.dfu_get_total_size()

 4.使用封装好的库

#放入文件名和串口
upgrader = nrfutil.nrfutil(self.FirmwareFilename,serial_port)
#使用全局变量放filesize,在回调函数update_progress中打印进度
global fileSize
fileSize = upgrader.do_serial(update_progress = self.update_progress,ping = True,timeout = 2,flow_control = 0)
upgrader.update()


def update_progress(self,progress):
        global fileSize
        #self.leng是总size
        self.leng = progress + self.leng
        complete = int(self.leng/fileSize*100)
        if complete ==100:
            print('complete')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值