当前位置: 首页 > news >正文

CH341 SPI方式烧录BK7231U

        CH341是一个USB总线的转接芯片,通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。

         BK7231U Wi-Fi SOC芯片,内嵌处理器。1. 符合802.11b/g/n 1x1协议    2. 17dBm 输出功率3. 支持20/40 MHz带宽和STBC    4. 支持Wi-Fi STA、AP、Direct模式 5. 支持蓝牙5.1协议,-90dB灵敏度和20dBm输出功率    6. 片内MCU 7. 最高频率120MHz    8. 片内256Kbyte数据RAM 9. 内置2MB FLASH,支持透明下载    10. 6路32位 PWM 11. 多路程序下载与JTAG接口    12. 全速USB主机和设备 13. 50MHz SDIO和SPI接口,并支持主从模式    14. 支持两路I2C接口
15. 支持两路高速UART   16. 6路32位PWM 17. 麦克风信号放大    18. 内置多通道ADC 19. 支持8位DVP 图像传感器    20. 32字节eFUSE

        BEKEN(博通集成)的芯片还是不错的,比如这款BK7231U是对标ESP8266的,并且还有蓝牙功能。但是官方的通用烧写器,价格大约200多,对爱好者来说毫无性价比可言。并且BEKEN的官网什么都没有,数据手册、SDK这些都是给企业用户。个人用户想学习难度不小。

        直到看了这篇https://www.elektroda.com/rtvforum/topic3931424.html用python+ Raspberry Pi实现了对BK7231的烧写。感觉还有点搞头。

        手头没有Raspberry Pi,照搬原作者的方法不太现实。所以做了下变通,就有了后面的方法:

一、硬件连接

        这个C-8133U模块主控是BK7231U,没有模块资料,模块引脚定义是自己测的。

        下面是BK7231U芯片的引脚定义,注意和其他的BK7231,比如BK7231T、BK7231N是不一样的。

        左边是BK7231U,右边是CH341

GND  <------------------->  GND

VBAT/3V3    <---------->   VCC

CEN         <-------------->  D2(GPIO)

P23/MOSI <------------->  MISO

P22/MISO <-------------->  MOSI

P21/CSN <-----------------> CS0

P20/SCK <----------- -----> SCK

二、烧录原理

        BK7231U中存储用户程序的flash是一个25系列的flash,支持SPI读写。但是直接用CH341读写BK7231u是不行的。BK7231U数据手册中关于程序下载有如下描述:

         也就是说,需要在芯片复位后将做模式选择才能使CH341将BK7231U当作一个flash,如果错过了复位后的几百毫秒,BK7231U进入MCU运行模式,就不能烧录的。

三、烧录实现

1、使BK7231U进入SPI烧录模式

import random
import time
import numpy as np
from matplotlib import pyplot as plt
import os
import random
import numpy as np
from fractions import Fraction
import pyautogui
from PIL import Image
import binascii
import struct
import codecs
import binascii## call ch341dll_wrap
from ch341dll_32bits_wrap.ch341dll_wrap  import *#CEN:GPIO02
#
#
def GPIO_CEN_SET():result=ch341dll.CH341Set_D5_D0(hd.usb_id,0x04,0x04)if result==1:print("Set CEN hight success!\r\n")
def GPIO_CEN_CLR():result=ch341dll.CH341Set_D5_D0(hd.usb_id,0x04,0x00)if result==1:print("Set CEN low success!")def ChipReset():# set CEN low for 1sGPIO_CEN_CLR()time.sleep(0.1)GPIO_CEN_SET()def BK_EnterSPIMode(data):send_buf = bytearray(25)for x in range(25):send_buf[x] = datasend_buf=hd.ch341_spi4w_stream(bytes(send_buf))buf1 = bytearray(4)buf1[0]=0x9Fbuf1[1]=0x00buf1[2]=0x00buf1[3]=0x00#buf1=b'\x9F\x00\x00\x00'buf1=hd.ch341_spi4w_stream(bytes(buf1))out1=buf1[0]zeroCount=0;for x in range(1,4):if(buf1[x]==b'\x00'):zeroCount+=1print(buf1.raw)if out1!=b'\x00' and zeroCount==3:return 1return 0hd = CH341DEV(0)
hd.ch341_i2c_speed(3)for x in range(1,11):print('\r\n\r\n\r\n----------------try into BK_SPIMode-----------------------\r\n')print("attemp to make BK7321 into SpiMode , the [",x,"] Times\r\n")ChipReset()ifEnterSpiMode=BK_EnterSPIMode(0xD2)if(ifEnterSpiMode==1):print("\r\nEnter SpiMode success!!!\r\n")breaktime.sleep(1)if ifEnterSpiMode!=1:print("Enter SpiMode failure!!!   let's run againt \r\n")	

       这个PYTHON程序向CH341发送25个0xD2(必须是0xD2,发送多少个好像也没有固定的数量),然后发送了0x9F查询了一些flash的id,这里有点玄学,有几率使BK7231U进入SPI烧录模式。

2、用NeoProgrammer程序烧录bin到BK7231U

        BK7231U进入SPI烧录模式后,打开NeoProgrammer,BK7231U会被NeoProgrammer识别为GD25Q16。选好要烧录的bin文件(bootloader+用户bin打包文件),直接烧录。

四、总结

1、为什么不用PYTHON程序直接把后面下载BIN的步骤都实现了?

        主要是水平有限,只实现了PYTHON使能BK7231U进入SPI模式。

        这个方法可靠性不高,所以轮询了10次,总能成功的,不行就再运行一遍。

2、NeoProgrammer是驱动CH341读写24、25系列FLASH的专用程序,网上比较好找。NeoProgrammer下载flash稳定好用。

3、ch341dll_32bits_wrap.ch341dll_wrap这个依赖可以从这里下载GitHub - jimjiang2/ch341dll_wrap_typical_app: A ch341dll Wrap is for using in Python 32bits windows to access I2C SPI and MDIO (by GPIO), and Demo with display PC sreen on OLED by i2c or SPI .

4、BK7231U有rtt SDK:

GitHub - aozima/bk7231u_rtt_sdk: bk7231u_rtt_sdk

可以通过RTTHREAD env编写自己的固件。生成烧写用的bin,要用bk7231u_rtt_sdk\OTAPackage\beken_packager\beken_packager.exe打包一下,把bootloader打包进去,再用NeoProgrammer烧写。

相关文章:

CH341 SPI方式烧录BK7231U

CH341是一个USB总线的转接芯片&#xff0c;通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。 BK7231U Wi-Fi SOC芯片&#xff0c;内嵌处理器。1. 符合802.11b/g/n 1x1协议 2. 17dBm 输出功率3. 支持20/40 MHz带宽和STBC 4. 支持Wi-Fi STA、AP、…...

sd-webui-EasyPhoto win 安装笔记

目录 安装教程: 插件介绍 ControlNet 1.1 Tile: launch.py问题 依赖库 webui安装问题...

gradient_checkpointing

点评:本质是减少内存消耗的一种方式,以时间或者计算换内存 gradient_checkpointing(梯度检查点)是一种用于减少深度学习模型中内存消耗的技术。在训练深度神经网络时,反向传播算法需要在前向传播和反向传播之间存储中间计算结果,以便计算梯度并更新模型参数。这些中间结…...

回溯算法part05 算法

回溯算法part05 算法 今日任务 491.递增子序列46.全排列47.全排列 II 1.LeetCode 491.递增子序列 https://leetcode.cn/problems/non-decreasing-subsequences/description/ class Solution {List<List<Integer>> resultnew ArrayList<>();List<Inte…...

阿里云系统盘测评ESSD、SSD和高效云盘IOPS、吞吐量性能参数表

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…...

RK3568平台开发系列讲解(Linux系统篇)Linux 内核打印

🚀返回总目录 文章目录 一、方法一:dmseg 命令二、方法二:查看 kmsg 文件三、方法三:调整内核打印等级一、方法一:dmseg 命令 在终端使用 dmseg 命令可以获取内核打印信息,该命令的具体使用方法如下所示: 首先在串口终端使用 “dmseg”命令,可以看见相应的内核打印信息…...

迁移学习的最新进展和挑战

随着深度学习和人工智能技术的飞速发展&#xff0c;迁移学习作为一种有效的机器学习方法&#xff0c;已经在各个领域取得了显著的成果。迁移学习是指将一个领域&#xff08;源领域&#xff09;的知识应用到另一个领域&#xff08;目标领域&#xff09;&#xff0c;以提高目标领…...

Python基础(二十二、自定义模块和包)

文章目录 一、自定义模块1.如何自定义模块并导入?2.__main__变量的功能3.注意事项 二、自定义包1.什么是Python的包?2.__init __.py文件的作用?3.__all__变量的作用?4.示例 三、自定义模块和自定义包的好处 一、自定义模块 1.如何自定义模块并导入? 在Python代码文件中正…...

C#-数组

数组 (array) 是一种包含若干变量的数据结构&#xff0c;这些变量都可以通过计算索引进行访问。数组中包含的变量&#xff08;又称数组的元素&#xff09;具有相同的类型&#xff0c;该类型称为数组的元素类型。 数组类型为引用类型&#xff0c;因此数组变量的声明只是为数组实…...

机器学习周刊第二期:300个机器学习应用案例集

大家好 前文&#xff1a;机器学习项目精选 第一期 继续分享我最近看过并觉得非常硬核的资源&#xff0c;包括Python、机器学习、深度学习、大模型等等。 1、Python编程挑战 地址&#xff1a;https://github.com/Asabeneh/30-Days-Of-Python 30天Python编程挑战是一个逐步学…...

【华为OD机试真题2023CD卷 JAVAJS】中文分词模拟器

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 中文分词模拟器 知识点图字符串 时间限制:5s 空间限制:256MB 限定语言:不限 题目描述: 给定一个连续不包含空格字符串,该字符串仅包含英文小写字母及英文文标点符号(逗号、分号、句号),同时给定词库,对该字符串进…...

基于YOLOv8-pose的画笔关键点(bic_markers)检测

💡💡💡本文解决什么问题:教会你如何用自己的数据集训练Yolov8-pose关键点检测 Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.net/m0_63774211/category_12398833.html ✨✨✨手把手教你从数据标记到生成适合Yolov8-pose的yolo数据集;...

【实用技巧】Windows 电脑向iPhone或iPad传输视频方法1:无线传输

一、内容简介 本文介绍如何使用 Windows 电脑向 iPhone 或 iPad 传输视频&#xff0c;以 iPhone 为例&#xff0c;iPad的操作方法类似&#xff0c;本文不作赘述。 二、所需原材料 Windows 电脑&#xff08;桌面或其它文件夹中存有要导入的视频&#xff09;、iPhone 14。 待…...

爬虫实战 - 微博评论数据可视化

简介&#xff1a; 我们都知道在数据比较少的情况下&#xff0c;我们是可以很轻易的获取到数据中的信息。但是当数据比较庞大的时候呢&#xff0c;我们就很难看出来了。尤其是面对现如今数以万计的数据&#xff0c;就更了。 不过好在我们可以通过计算机来帮我们进行分析&#…...

python装饰器嵌套基础

1 python装饰器嵌套基础 python支持装饰器嵌套&#xff0c;即多个装饰器装饰同一个函数或方法。 1.1 嵌套执行顺序 用法 a_deco b_deco c_deco def test_nest_deco():pass描述 a_deco、b_deco、c_deco分别占一行&#xff0c;编写在同一个函数或方法的def语句上方。 从def…...

C语言之三子棋小游戏的应用

文章目录 前言一、前期准备模块化设计 二、框架搭建三、游戏实现打印棋盘代码优化玩家下棋电脑下棋判断输赢 四、结束 前言 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#…...

优雅处理并发:Java CompletableFuture最佳实践

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;今天&#xff0c;小黑要和大家聊聊CompletableFuture&#xff0c;这个Java 8引入的强大工具。 在Java传统的Future模式里&#xff0c;咱们都知道&#xff0c;一旦开始了一个异步操作&#xff0c;就只能等它结束…...

熟悉HDFS常用操作

1. 利用Hadoop提供的Shell命令完成下列任务 (1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。 #检查文件是否存在./bin/hdfs dfs -test -e text.txt echo $? #结果是1 代表已存在 #根据结果判断出文件已存…...

Adobe XD是什么?探索这款创新的用户体验设计工具

Adobexd是一种基于矢量的设计工具&#xff0c;主要用于设计移动和Web应用程序的用户界面(UI)。与Photoshop或ilustrator等其他Adobe产品相比&#xff0c;它相当轻。对于对快速设计和原型迭代感兴趣的界面设计师来说&#xff0c;轻量级并不是一件坏事。 在早期&#xff0c;Adob…...

java常用应用程序编程接口(API)——ArrayList概述及使用案例

前言&#xff1a; 学习了ArrayList&#xff0c;整理下ArrayList的常用功能及基本案例。打好基础&#xff0c;daydayup&#xff01; 如果需要了解API是什么并如何使用&#xff0c;可以看这篇文章。 java常用应用程序编程接口&#xff08;API&#xff09;——String概述及使用案…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...