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总线的转接芯片,通过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、…...
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、吞吐量性能参数表
阿里云服务器系统盘或数据盘支持多种云盘类型,如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等,阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…...
RK3568平台开发系列讲解(Linux系统篇)Linux 内核打印
🚀返回总目录 文章目录 一、方法一:dmseg 命令二、方法二:查看 kmsg 文件三、方法三:调整内核打印等级一、方法一:dmseg 命令 在终端使用 dmseg 命令可以获取内核打印信息,该命令的具体使用方法如下所示: 首先在串口终端使用 “dmseg”命令,可以看见相应的内核打印信息…...
迁移学习的最新进展和挑战
随着深度学习和人工智能技术的飞速发展,迁移学习作为一种有效的机器学习方法,已经在各个领域取得了显著的成果。迁移学习是指将一个领域(源领域)的知识应用到另一个领域(目标领域),以提高目标领…...
Python基础(二十二、自定义模块和包)
文章目录 一、自定义模块1.如何自定义模块并导入?2.__main__变量的功能3.注意事项 二、自定义包1.什么是Python的包?2.__init __.py文件的作用?3.__all__变量的作用?4.示例 三、自定义模块和自定义包的好处 一、自定义模块 1.如何自定义模块并导入? 在Python代码文件中正…...
C#-数组
数组 (array) 是一种包含若干变量的数据结构,这些变量都可以通过计算索引进行访问。数组中包含的变量(又称数组的元素)具有相同的类型,该类型称为数组的元素类型。 数组类型为引用类型,因此数组变量的声明只是为数组实…...
机器学习周刊第二期:300个机器学习应用案例集
大家好 前文:机器学习项目精选 第一期 继续分享我最近看过并觉得非常硬核的资源,包括Python、机器学习、深度学习、大模型等等。 1、Python编程挑战 地址: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 传输视频,以 iPhone 为例,iPad的操作方法类似,本文不作赘述。 二、所需原材料 Windows 电脑(桌面或其它文件夹中存有要导入的视频)、iPhone 14。 待…...
爬虫实战 - 微博评论数据可视化
简介: 我们都知道在数据比较少的情况下,我们是可以很轻易的获取到数据中的信息。但是当数据比较庞大的时候呢,我们就很难看出来了。尤其是面对现如今数以万计的数据,就更了。 不过好在我们可以通过计算机来帮我们进行分析&#…...
python装饰器嵌套基础
1 python装饰器嵌套基础 python支持装饰器嵌套,即多个装饰器装饰同一个函数或方法。 1.1 嵌套执行顺序 用法 a_deco b_deco c_deco def test_nest_deco():pass描述 a_deco、b_deco、c_deco分别占一行,编写在同一个函数或方法的def语句上方。 从def…...
C语言之三子棋小游戏的应用
文章目录 前言一、前期准备模块化设计 二、框架搭建三、游戏实现打印棋盘代码优化玩家下棋电脑下棋判断输赢 四、结束 前言 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子&#…...
优雅处理并发:Java CompletableFuture最佳实践
第1章:引言 大家好,我是小黑,今天,小黑要和大家聊聊CompletableFuture,这个Java 8引入的强大工具。 在Java传统的Future模式里,咱们都知道,一旦开始了一个异步操作,就只能等它结束…...
熟悉HDFS常用操作
1. 利用Hadoop提供的Shell命令完成下列任务 (1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。 #检查文件是否存在./bin/hdfs dfs -test -e text.txt echo $? #结果是1 代表已存在 #根据结果判断出文件已存…...
Adobe XD是什么?探索这款创新的用户体验设计工具
Adobexd是一种基于矢量的设计工具,主要用于设计移动和Web应用程序的用户界面(UI)。与Photoshop或ilustrator等其他Adobe产品相比,它相当轻。对于对快速设计和原型迭代感兴趣的界面设计师来说,轻量级并不是一件坏事。 在早期,Adob…...
java常用应用程序编程接口(API)——ArrayList概述及使用案例
前言: 学习了ArrayList,整理下ArrayList的常用功能及基本案例。打好基础,daydayup! 如果需要了解API是什么并如何使用,可以看这篇文章。 java常用应用程序编程接口(API)——String概述及使用案…...
2024年了,Layui再战三年有问题不?
v2.9.3 2023-12-31 2023 收官。 form 优化 input 组件圆角时后缀存在方框的问题 #1467 bxjt123优化 select 搜索面板打开逻辑,以适配文字直接粘贴触发搜索的情况 #1498 Sight-wcgtable 修复非常规列设置 field 表头选项时,导出 excel 出现合计行错位的…...
消息队列-RocketMQ-概览与搭建
RocketMQ 领域模型 RockeMQ整体结构预览 RocketMQ 中的一些概念 Topic:主题,可以理解为类别、分类的概念 MessageQueue:消息队列,存储数据的一个容器(队列索引数据),默认每个 Topic 下有 4 个队…...
Vue3技术解析(小册子)
随着 Vue 3 正式版本的发布,未来 Vue 3 将会成为前端的主流框架,这个毋庸置疑。Vue 3 在使用方面会兼容部分 Vue 2.x 的特性,比如 options API。 所以,究竟是要先学习 Vue 2 打好基础,还是直接学习 Vue 3 呢ÿ…...
即将消失的五种编程语言?
1. Ruby Ruby 在 1999 年发布后立即受到程序员们的热捧,它能够快速构建应用程序的特性给程序员留下了非常深刻的印象。紧随其后,备受欢迎的 Ruby on Rails 框架于 2004 年发布,由于 Ruby 和 Rails 这两个名称在当时几乎成为了同义词…...
c++学习:STL库(框架)+字符串模板类string+vector容器+list链表
目录 stl库 常用组件包括 字符串库 字符串模板类string 头文件 最常用的字符串模板类 字符串类型 模板原型 模板的成员数据类型 模板成员函数 有些函数会有重载,可以去下面网址查看std::basic_string - cppreference.comhttps://zh.cppreference.com/w/cp…...
2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷④
2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷4 目录 需要竞赛软件包环境以及备赛资源可私信博主!!! 2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷4 模块一 …...
使用Scikit Learn 进行识别手写数字
使用Scikit Learn 进行识别手写数字 作者:i阿极 作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏…...
GB/T 15036-2018 实木地板检测
实木地板是指未经拼接、覆贴的单块木材直接加工而成的地板,实木地板具有脚感舒适,环保等优良的性能,在家庭装修中被广泛使用,尤其是在国内很受欢迎。 GB/T 15036-2018 实木地板测试介绍: 测试项目 测试方法 外观 G…...
基于ElementUI封装的下拉树选择可搜索单选多选清空功能
效果: 组件代码 /*** 树形下拉选择组件,下拉框展示树形结构,提供选择某节点功能,方便其他模块调用* author wy* date 2024-01-03 * 调用示例:* <tree-select * :height"400" // 下拉框中树形高度* …...
计算机网络-各层协议
大家在搞嵌入式开发的时候基本都了解过七层网络协议、五层网络协议、四层网络协议,那么今天让我们更加的深入了解一下: 历史发展介绍 OSI七层模型由ISO国际标准化组织提出的通信标准。TCP/IP四层模型是OSI七层模型的简化版,OSI在它被官方完…...
国家企业信用公示系统官方网站/网站编辑
Array对象 Array对象和python里面的list对象一样,是用来存储多个对象值的对象,且方法和属性基本上类似。 一、属性 lenght 二、方法 1、concat() 用于连接两个或多个数组。类似python中的extend方法。 arrayObject.concat(arrayX,arrayX,......,arrayX)…...
网站开发大致多少钱/微信营销推广软件
本文将教给你如何安装 VS2015,如果你还想了解 VS2015 的使用,请猛击:在 VS2015 下运行C语言程序 与此同时,我们还提供了非常优秀的C语言教程。这套教程由C语言中文网站长执笔,将多年的编程经验灌输其中,典型…...
大庆建网站/semikron
主体视图 PDF去广告版 下载:http://pan.baidu.com/s/1kTC6txl转载于:https://www.cnblogs.com/lieyan/p/3839743.html...
做58同城的网站要多少钱/佛山网站营销推广
要背诵 import java.lang.Math.*; Math.sqrt(x) 这是对x开根号 Math.pow(x,a);这是x的a次幂 1.数值类型的转换 实线是完全继承 虚线是有丢失 int转float有精度丢失 9.40以前 2.强制类型转换 double x 9.997; int nx (int) x; //nx9 位运算算法面试 或就是有1就是1 &a…...
ubuntu 装wordpress/nba最新新闻消息
wait_for 只是用来在规定时间内检测,状态是否为所期望的状态是才,才执行后续的操作 如: - name: Checking free port for transfer wait_for: host: {{ inventory_hostname }} port: 6088 state: stopped when: - inv…...
建立企业网站的详细步骤/银川seo优化
解决nginx相关问题 1、优化nginx支持超长地址栏 默认情况下nginx无法支持长地址栏,会报414错误 重置配置文件 [rootproxy ~]# cd /usr/local/nginx/ [rootproxy nginx]# cp conf/nginx.conf.default conf/nginx.conf cp:是否…...