CH341 SPI方式烧录BK7231U

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

        f76db1aef4fa0123146a1b6e7c3f3553.png 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,照搬原作者的方法不太现实。所以做了下变通,就有了后面的方法:

一、硬件连接

7b7b8d9cfcce42e787fa4552a43eee20.jpeg

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

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

ea4c4c37033d4c679745587550a7e4d6.png

        左边是BK7231U,右边是CH341

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

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

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

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

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

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

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

a096b6f8e12942bb9d19797877430826.png

二、烧录原理

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

         也就是说,需要在芯片复位后做模式选择使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 1s
    GPIO_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] = data
	send_buf=hd.ch341_spi4w_stream(bytes(send_buf))

	buf1 = bytearray(4)
	buf1[0]=0x9F
	buf1[1]=0x00
	buf1[2]=0x00
	buf1[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+=1
	print(buf1.raw)

	if out1!=b'\x00' and zeroCount==3:
		return 1
	return 0



	
hd = 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")
        break
    time.sleep(1)
	
if ifEnterSpiMode!=1:
    print("Enter SpiMode failure!!!   let's run againt \r\n")	

       这个PYTHON程序向CH341发送25个0xD2(必须是0xD2,发送多少个好像也没有固定的数量要求),然后发送了0x9F查询了一下flash的id。再判断spi接收,好像是0xd2命令应该返回1个0xd2,24个0x00,0x9f命令返回id。但实际上0xd2返回1个非0的数和24个0,0x9f返回0xd2和3个0。这里有点玄学,有几率使BK7231U进入SPI烧录模式。这个方法可靠性不高,所以轮询了10次,总能成功的,不行就再运行一遍。

c05d8a05bc5547028ba21c02a5ff9330.png

2、用NeoProgrammer程序烧录bin到BK7231U

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

ad58bce6390548fdb4e5cec9593cc4cc.png612f8a35ca1545eb84689ab6d00c82e9.png

四、总结

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

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

        

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烧写。

5、实测对BK7251也有效

        被识别为XT25F32B,4M flash

65f1f5fb93634bf4b76cf89ff6f65cf0.png

12e98d33629e49198d59c6b306d912fd.jpg

585b258131dd4d43a1deb6083234789e.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/320220.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

美颜技术详解:美颜SDK与直播平台集成

如今&#xff0c;美颜技术成为了吸引用户的一项重要功能。本篇文章&#xff0c;小编将深入讲解美颜技术&#xff0c;重点关注美颜SDK的原理以及如何将其无缝集成到直播平台中&#xff0c;为用户提供更加优质的视觉体验。 一、美颜技术概述 美颜技术的应用范围广泛&#xff0c…

星河璀璨:飞桨星河文心SDK与Gurdance珠联璧合让大模型更像人!

星河璀璨&#xff1a;飞桨星河文心SDK与Gurdance珠联璧合让大模型更像人&#xff01; 本项目效果惊艳&#xff0c;可以在AIStudio星河社区一键运行 只需要在cpu基础版下运行&#xff0c;妈妈再也不怕我的算力不够了&#xff01; 1、引言 2023年8月22日&#xff0c;百度董事…

阿里云c8i服务器CPU性能、架构及费用测评

阿里云第八代云服务器ECS计算型c8i实例&#xff0c;CPU采用Intel Xeon Emerald Rapids或者Intel Xeon Sapphire Rapids&#xff0c;主频不低于2.7 GHz&#xff0c;全核睿频3.2&#xff0c;阿里云百科aliyunbaike.com分享阿里云c8i服务器CPU处理器型号、存储、网络、安全、使用场…

uniCloud 云数据库(1)

目录 1&#xff1a;云数据库入门,基本概念了解 1.1 云数据库是关系型还是Nosql? 1.2 uniCloud 云数据库和关系型数据库的对比 1.3 官方文档传送门 2: 基本操作表 创建 在uniCloud web控制台 进行创建 数据表的3个组成部分 通过传统方式操作数据库 获取集合的引用 集…

Microsoft Excel 直方图

Microsoft Excel 直方图 1. 数据示例2. 打开 EXCEL3. settings4. 单击直方图柱&#xff0c;右键“添加数据标签”References 1. 数据示例 2. 打开 EXCEL 数据 -> 数据分析 -> 直方图 3. settings 输入区域样本值、接受区域分类间距&#xff0c;输出选项选择“新工作表组…

【LV12 DAY17-18 中断处理】

GPX1_1是外部中断9 EINT9 查询可知其中断ID是57 所以需要进行人为修正lr的地址 sub lr&#xff0c;lr&#xff0c;#4 //iqr异常处理程序 irq_handler: //IRQ异常后LR保存的地址是被IRQ打断指令的下一条再下一条指令的地址&#xff0c;所以我们需要人为进行修正一下sub LR,L…

【DC系列教程2--Timing and Area Constrains】

DC系列教程2--Timing and Area Constrains Lab Flow:依赖输入Design SpecificationLab Demo Goal: determin the unit of time in the target library; //设置时间精度Create a Design Compiler timing and area constrains file based on a provided schematic and specifacat…

动态内存管理4大函数的进阶

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

std::atomic<int>的原理

⚠️WARNING⚠️ 注意&#xff1a; 试验平台是CentOS7&#xff0c;x86_64&#xff0c;Intel Xeon CPU 不同平台原理大不相同&#xff01; [mzhaiinclude]$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 1 On-line CPU(s) lis…

66.网游逆向分析与插件开发-角色数据的获取-角色类的数据分析与C++还原

内容来源于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;65.网游逆向分析与插件开发-角色数据的获取-项目需求与需求拆解-CSDN博客 ReClass.NET工具下载&#xff0c;它下方链接里的 逆向工具.zip 里的reclass目录下&#xff1a;注意它分x64、x32版本&#x…

HarmonyOS-LocalStorage:页面级UI状态存储

管理应用拥有的状态概述 上一个章节中介绍的装饰器仅能在页面内&#xff0c;即一个组件树上共享状态变量。如果开发者要实现应用级的&#xff0c;或者多个页面的状态数据共享&#xff0c;就需要用到应用级别的状态管理的概念。ArkTS根据不同特性&#xff0c;提供了多种应用状态…

EasyExcel简单实例

EasyExcel简单实例 准备工作场景一&#xff1a;读取 Student 表需求1&#xff1a;简单读取需求2&#xff1a;读取到异常信息时不中断需求3&#xff1a;读取所有的sheet工作表需求4&#xff1a;读取指定的sheet工作表需求5&#xff1a;从指定的行开始读取 场景二&#xff1a;写入…

YOLOv8 Ultralytics:使用Ultralytics框架进行MobileSAM图像分割

YOLOv8 Ultralytics&#xff1a;使用Ultralytics框架进行MobileSAM图像分割 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用Ultralytics框架进行MobileSAM图像分割参考文献 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩…

【云原生】springboot 整合 OpenTelemetry

目录 一、前言 二、应用可观测性概述 2.1 什么是可观测性 2.2 可观测性三大指标 2.2.1 指标&#xff08;Metrics&#xff09; 2.2.2 日志&#xff08;log&#xff09; 2.2.3 追踪(Traces) 三、OpenTelemetry 介绍 3.1 什么是OpenTelemetry 3.2 OpenTelemetry架构和组件…

SMART PLC绝对值定位往复运动控制(脉冲绝对定位+状态机编程)

三菱FX3GA系列绝对定位指令DDRVA实现往复运动控制详细内容介绍请参考下面文章链接&#xff1a; https://rxxw-control.blog.csdn.net/article/details/135570157https://rxxw-control.blog.csdn.net/article/details/135570157这篇博客我们介绍SMART PLC里如何开启绝对值定位指…

隧道自动化监测系统的主要产品和监测内容

一、背景 随着交通行业的不断发展&#xff0c;隧道作为交通基础设施的重要组成部分&#xff0c;其安全和稳定性对于保障人们的生命财产安全具有重要意义。隧道自动化监测系统作为一种先进的安全监测手段&#xff0c;能够实时监测隧道内部的各项参数&#xff0c;为隧道的安全运…

CentOS 7.6的HTTP隧道代理如何支持移动设备和远程用户

在CentOS 7.6上配置HTTP隧道代理以支持移动设备和远程用户&#xff0c;需要考虑到移动网络的特点以及远程用户的需求。以下是一些关键步骤和策略&#xff0c;可以帮助你实现这一目标。 1. 优化移动设备体验 压缩数据&#xff1a;HTTP隧道代理可以用于压缩进出移动网络的数据&…

Fluent 动网格应用:2.5D 网格重构

1 概述 2.5D 网格重构是一种快速网格重构方法&#xff0c;主要应用于涡旋压缩机等存在复杂平面运动且无法简化为二维计算的问题。 涡旋压缩机工作原理&#xff08;视频源&#xff1a;维基百科&#xff09; 适用于 2.5D 动网格的问题特点&#xff1a; 计算域几何形状为柱体类形…

(菜鸟自学)搭建虚拟渗透实验室——安装Windows 7 靶机

安装Windows 7 靶机 新建一台虚拟机&#xff0c;并选择Windows 7系统 虚拟机基本配置如下 为虚拟机挂载Windows7的镜像 点击开启虚拟机&#xff0c;将进入安装程序&#xff0c;按如下步骤进行操作&#xff1a; 点击“下一步”》勾选“我接受许可条款”&#xff0c;点击“下…

【读书笔记】《重构_改善既有代码的设计》重构的方法论

重构的方法论 标题&#xff1a;【读书笔记】【读书笔记】《重构_改善既有代码的设计》重构的方法论 时间&#xff1a;2024.01.14 作者&#xff1a;耿鬼不会笑 重构是什么? 什么是重构&#xff1a; “重构”这个词既可以用作名词也可以用作动词。 重构&#xff08;名词&…
最新文章