集约化网站群建设,最大的外包公司,哪家的装修公司比较好,老字号品牌建设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、… 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():resultch341dll.CH341Set_D5_D0(hd.usb_id,0x04,0x04)if result1:print(Set CEN hight success\r\n)
def GPIO_CEN_CLR():resultch341dll.CH341Set_D5_D0(hd.usb_id,0x04,0x00)if result1: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_bufhd.ch341_spi4w_stream(bytes(send_buf))buf1 bytearray(4)buf1[0]0x9Fbuf1[1]0x00buf1[2]0x00buf1[3]0x00#buf1b\x9F\x00\x00\x00buf1hd.ch341_spi4w_stream(bytes(buf1))out1buf1[0]zeroCount0;for x in range(1,4):if(buf1[x]b\x00):zeroCount1print(buf1.raw)if out1!b\x00 and zeroCount3: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()ifEnterSpiModeBK_EnterSPIMode(0xD2)if(ifEnterSpiMode1):print(\r\nEnter SpiMode success!!!\r\n)breaktime.sleep(1)if ifEnterSpiMode!1:print(Enter SpiMode failure!!! lets run againt \r\n) 这个PYTHON程序向CH341发送25个0xD2必须是0xD2发送多少个好像也没有固定的数量然后发送了0x9F查询了一些flash的id这里有点玄学有几率使BK7231U进入SPI烧录模式。 2、用NeoProgrammer程序烧录bin到BK7231U BK7231U进入SPI烧录模式后打开NeoProgrammerBK7231U会被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烧写。