页次: 1
还是我自己来结帖了,一直忙着板砖,没时间好好学习。
lichee nano 使用的是PE6 = 1点屏,由于PE6上电默认为1,所以上述配置不生效也能点屏
修改u-boot/arch/arm/mach-sunxi/board.c
static int sunxi_gpio_output2(u32 pin, u32 val)
{
u32 dat;
u32 bank = GPIO_BANK(pin);
u32 num = GPIO_NUM(pin);
struct sunxi_gpio *pio = BANK_TO_GPIO(bank);
dat = readl(&pio->dat);
if (val)
dat |= 0x1 << num;
else
dat &= ~(0x1 << num);
writel(dat, &pio->dat);
return 0;
}
static int gpio_init(void)
{
//使用非dm驱动直接设置引脚电平
sunxi_gpio_set_cfgpin(SUNXI_GPE(12), SUNXI_GPIO_OUTPUT);
sunxi_gpio_output2(SUNXI_GPE(12), 1);
简介:
用STM32做东西免不了要考虑升级什么的,特别是对外暴露USB口的时候,大多时候设计个全速USB(12Mbps)就够用了,现在想用这个USB做程序升级。代码中虚拟出可以被DfuSeDemo识别的设备,这样就可以只连USB线,发送指令到MCU进入DFU,升级完跳转到程序。不需要去拨开关什么的额外操作,一根USB线搞定升级。
主要步骤:
STM32F4等系列在system boot里面已经集成了DFU,也就是(BOOT0=1,BOOT1=0),重启进入System memory。
对于开发板,只要把boot0跳到0跑用户程序,跳到1进system boot,可以用串口、DFU等升级用户程序。早期的片子没有集成DFU,自己写一个,然后想办法跳转过去就行了。
手头有个STM32F401开发板 STM32F401CCU6,tb便宜+Type-c,拿这个跑Demo。
把右上角的拨码开关干上去(boot0=1),然后RST一下,打开DfuSeDemo(V3.0.6),接上USB连接电脑。下载程序我就不bb了,注意图中的两个按钮,下载完后按钮2可以跳转到更新的程序,然后就没有然后了(两个按钮都变灰,你无法操作了)。
现在想把按钮1搞出来,从程序跳转到DFU,释放双手。百毒到处找资料,发现官方的Demo把这个功能阉割了,不管你怎么努力都不行,中文社区还放出了 DfuSeDemo_A.exe下载也是空文件夹,找不到这玩意儿。
DfuSeDemo这个官方给出了源码,在软件的安装目录,C++的,有能耐的大佬可以去改改。后面找到github上有大佬干了这个,我就把别人编译好的文件拿来用了,附件分享可执行文件。现在上位部分识别没问题了,开始cubemx流水化作业了。
新建项目、配置SWD、时钟、USB Device。要给USB 48NHz时钟,时钟树如下:
简单配置下HID参数,报告描述符设置为23,后面有数据需要填充。
把堆栈设置大一点,堆8K,栈16K。然后就可以快活玩耍了。
生成MDK工程,配置勾选生成hex,然后配置用户指令生成dfu(hex2dfu.exe -t "$h@h.hex")
修改代码:
usbd_custom_hid_if.c
/** Usb HID report descriptor. */
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
/* USER CODE BEGIN 0 */
0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1) 表示一个报文标签之类的用途类页
0x09, 0x01, // USAGE (Vendor Usage 1) 表示一个报告ID标志
0xa1, 0x00, // COLLECTION (Physical) 要以下面最后的0xc0结束它
0x85, 0x80, /* REPORT_ID (128) */
0x09, 0x55, /*USAGE (LED 1) */
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x26, 0xFF, 0x00, /* LOGICAL_MAXIMUM (255) */
0x75, 0x08, /* REPORT_SIZE (8 bits) */
0x95, 0x01, /* REPORT_COUNT (1) */
0xB1, 0x82, /* FEATURE (Data,Var,Abs,Vol */
/* USER CODE END 0 */
0xC0 /* END_COLLECTION */
};
static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state)
{
/* USER CODE BEGIN 6 */
extern RTC_HandleTypeDef hrtc;
if(event_idx ==0x80 && state ==0x55)
{
__HAL_RCC_PWR_CLK_ENABLE();
HAL_PWR_EnableBkUpAccess();
HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x5A5A);
HAL_PWR_DisableBkUpAccess();
HAL_NVIC_SystemReset();
while (1);
}
return (USBD_OK);
/* USER CODE END 6 */
}
用RTC寄存器保存标志位,然后重启。重启后判断标志是否需要跳转进system memory
/* USER CODE BEGIN 2 */
__HAL_RCC_PWR_CLK_ENABLE();
HAL_PWR_EnableBkUpAccess();
isJumpDFU=HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0);
if(isJumpDFU == 0x5A5A)
{
//ReebUSB();
HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0);
HAL_PWR_DisableBkUpAccess();
JumpToBootloader();
}else
{
HAL_PWR_DisableBkUpAccess();
}
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_Delay(300);
HAL_GPIO_TogglePin(LED_D1_GPIO_Port,LED_D1_Pin);
}
文件下载:
写在最后:
如果当前已经使用了USB干别的事情,那么也是可以利用组合设备的方式,将这个hid接口集成进去的。
我目前使用的方法是,系统运行日志存储在spi flash中,然后虚拟出USB mass,电脑上显示U盘,可以直接操作文件。
然后与这个hid集成形成一个组合设备,mass和hid共存,有相关疑问的道友可以回帖,要是需要后期我搞个组合设备的demo。
为了方便对git不熟的朋友, 这里提供打包下载, SDL 的 lib 和 dll 已经内置, 可以用 VC2015/VC2017 编译成功:
本站下载: visual_studio_2017_sdl_x64_debugdump_20190116.7z
只需要设置 目标平台 和 平台工具集
这个压缩包,下载下来好像损坏了,是不是晕哥没弄好吧?解压报错
手头有一个lichee+5寸屏,一个3.5寸的唱戏机。在使用uboot的时候,发现nano点屏没有问题,唱戏机就不行。
后面去查电路找引脚,发现唱戏机使用PE12控制PWM,nano为低电平,唱戏机为高电平。
按照nano的教程将引脚改为PE12,分辨率改为480*272,然后设置了PWM反转,还是不行。
#define CONFIG_VIDEO_LCD_BL_PWM "PE6"
查看代码,定位到sunxi_display.c中void *video_hw_init(void),初始化屏幕。
*video_hw_init()>sunxi_mode_set(mode, fb_dma_addr)>sunxi_lcdc_backlight_enable()->
sunxi_name_to_gpio(CONFIG_VIDEO_LCD_BL_PWM)->gpio_lookup_name()->dm_gpio_lookup_name()
最后这个函数,ret = dm_gpio_lookup_name(name, &desc);返回失败了。
查资料感觉这个应该跟uboot驱动模型(DM),有关。是不是需要配置设备树啊,请问应该怎么配置?
也就是想通过dm驱动设置对应的PWM引脚的电平。
1. 不建议在Windows下开发,坑很多
2. uboot是bootloader;xboot是一个系统,与其对应的概念是linux、freertos、rt-thread等
3. 主线内核版本新, 有人维护;BSP驱动多,版本旧没人维护。
4. 这个建议自己对比,每个框架都有自己的优点和缺点,脱离应用场景来谈是没法谈的
5. 接口问题建议看数据手册;USB Wifi没有用过没法回答你
6. 肯定没法达到的。intel最近有写一篇文章怎么将linux的启动时间缩短到3秒内,你可以去看看。
新手司机上路,先在window10上装个ubuntu,然后开启ssh,安装vscode remote ssh插件,交叉编辑开发很舒服。
不需要专门去启动虚拟机,资源占用也少,文件还可以直接拷。编译还是在Ubuntu路径中比较好,编完再拷出来
我电脑的ubuntu路径:
C:\Users\mbed\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\pp
烧写脚本:
del uboot u-boot-sunxi-with-spl.bin
copy C:\Users\mbed\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\pp\mycode\f1c100s\u-boot\u-boot-sunxi-with-spl.bin
sunxi-fel.exe uboot u-boot-sunxi-with-spl.bin
Windows Subsystem for Linux(简称WSL)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu 14.04 "Trusty Tahr"映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。
北京时间 2019 年 5 月 3 日,在 PyCon 2019 大会上,微软发布了 VS Code Remote。这是一个用来实现远程开发的功能插件,对于许多使用 Windows 进行开发,但是需要将程序部署在服务器的用户来说,提供了非常大的便利。这些插件包括了:
Remote - SSH
Remote - Containers
Remote - WSL
@明月心惜 最近买的吗?求购买链接
背光芯片就那么几个, 看下是什么封装的, 帮你猜一下
【夏新M-185 4.3寸看戏机老人唱戏机听戏收音机老年高清视频播放器】 https://m.tb.cn/h.eNYNskN?sm=04b88c 点击链接,再选择浏览器咑閞;或椱ァ製这段描述$p6sWYnIdSuC$后到?◇綯℡寳?
18年11月买的,现在还在卖。40PIN最近那个sot-23-6就是驱动,丝印BIBHF6,引脚找到了,PE12,但是使能逻辑可能和nano(低电平)不一样,所以点不亮,我再试试。
页次: 1