大家好,
我有一个带有Winbond“W25Q32FW”的自定义板,并希望在QSPI上闪光PXP_roporter演示。
不幸的是现在没有成功。到目前为止我所做的一切:
1.为闪存添加了一个新的头文件:da1468x_sdk_btle_v_1.0.8.1050.1 \ sdk \ bsp \ memory \ include \ qspi_w25q32fw.h
#ifndef _qspi_w25q32fw_h_
#define _qspi_w25q32fw_h_
#ifndef winbond_id.
#define winbond_id 0xef.
#万一
//设备类型使用命令0x9f
#define w25q32fw 0x60
#ifndef w25q_32mb_size.
#define w25q_32mb_size 0x16
#万一
#if(flash_autodetect == 1)||(DG_CONFIGFLASH_MANUFAFFURER_ID == WINBOND_ID && \
dg_configflash_device_type == w25q32fw && dg_configflash_deny == w25q_32mb_size)
#include“qspi_common.h”
#include“qspi_winbond.h”
静态void flash_w25q32fw_sys_clock_cfg(sys_clk_t sys_clk);
静态UINT8_T flash_w25q32fw_get_dummy_bytes(void);
static const qspi_flash_config_t flash_w25q32fw_config = {
.manufacturer_id = winbond_id,
.device_type = w25q32fw,
.device_dentions = w25q_32mb_size,
.is_suspending = flash_w25q_is_suspended,
.initialize = flash_w25q_initialize,
.deactivate_command_entry_mode = flash_w25q_deactivate_command_entry_mode,
.sys_clk_cfg = flash_w25q32fw_sys_clock_cfg,
.get_dummy_bytes = flash_w25q32fw_get_dummy_bytes,
.break_seq_size = hw_qspi_break_seq_size_1b,
.address_size = hw_qspi_addr_size_24,
.page_program_opcode = cmd_quad_page_program,
.quad_page_program_address = true,
.erase_opcode = cmd_sector_erase,
.erase_suspend_opcode = w25q_erase_program_suspend,
.erase_resume_opcode = w25q_erase_program_resume,
.read_erase_progress_opcode = cmd_read_status_register,
.erase_in_progress_bit = flash_status_busy_bit,
.erase_in_progress_bit_high_level = true,
.send_once = 1,
.extra_byte = 0xA0,
.ucode_wakeup = {w25q_udode_wakeup,sizeof(w25q_udode_wakeup)},
.power_down_delay = w25q_power_down_delay_us,
.release_power_down_delay = w25q_release_power_down_delay_us,
};
#if(flash_autodetect == 0)
const qspi_flash_config_t * const flash_config =&flash_w25q32fw_config;
#万一
qspi_section静态void flash_w25q32fw_sys_clock_cfg(sys_clk_t sys_clk)
{
}
qspi_section静态uint8_t flash_w25q32fw_get_dummy_bytes(void)
{
返回2;
}
#万一
#endif / * _qspi_w25q32fw_h_ * /
/ **
* \}
* \}
* \}
* /
2.修改da1468x_sdk_btle_v_1.0.8.1050.1 \ sdk \ bsp \ system \ loaders \ uartboot \ config \ custom_config.h
#define dg_configflash_connected_to(flash_connected_to_1v8)
#define dg_configflash_power_down(0)
#define dg_configflash_autodetect(0)
#define dg_configpower_1v8_active(1)
#define dg_configpower_1v8_sleep(1)
#define dg_configuse_auto_chip_detection(1)
#define dg_configpower_1v8p(1)
#include“bsp_definitions.h”
#define os_baremetal.
#define __heap_size 0x2000.
#define dg_configuse_lp_clk lp_clk_32768
#define dg_configcode_location non_volatile_is_flash.
#define dg_configext_crystal_freq ext_crystal_is_16m.
#define dg_configimage_setup development_mode.
#define dg_configemulate_otp_copy(0)
#define dg_configuser_can_use_timer1(1)
#define dg_configmem_retention_mode(0x1f)
#define dg_configshuffling_mode(0x3)
#define dg_configuse_wdog(0)
#define dg_configuse_bod(0)
#define dg_configuse_dcdc(1)
#define dg_configflash_connected_to(flash_connected_to_1v8)
#define dg_configflash_power_down(0)
#define dg_configflash_autodetect(0)
#define dg_configpower_1v8_active(1)
#define dg_configpower_1v8_sleep(1)
#define dg_configbattery_type(battery_type_limn2o4)
#define dg_configbattery_charge_current 2 // 30ma
#define dg_configbattery_precharge_current 20 // 2.1ma
#define dg_configbattery_charge_ntc 1 //禁用
#define dg_configuse_usb 0.
#define dg_configuse_usb_charger 0.
#define dg_configallow_charging_not_enum 1.
#define dg_configuse_prodk(1)
#define dg_configuse_sw_cursor(1)
#define dg_configuse_hw_rf 0.
#define dg_configuse_auto_chip_detection(1)
#define dg_configpower_1v8p(1)
#define dg_configdisable_background_flash_ops(1)
#define dg_configcrypto_adapter(0)
#define dg_configuse_hw_wkup(0)
#define dg_configsuppress_hellomeg(0)
#define dg_configverify_qspi_write(1)
#define dg_configflash_adapter(1)
#define dg_confignvms_adapter(1)
#define dg_confignvms_ves(1)
#define dg_configflash_header_file“qspi_w25q32fw.h”
#define dg_configflash_manufacturer_id winbond_id.
#define dg_configflash_device_type w25q32fw
#define dg_configflash_denty w25q_32mb_size.
#define dg_configflash_max_write_size(256)
3.编译diasemi \ da1a68x_sdk_btle_v_1.0.8.1050.1 \ sdk \ bsp \ system \ loaders \ uartboot
4.通过串行使用CLI_Programmer Flash UartBoot.bin
cli_programmer 1.23
版权所有(c)2016年对话半导体雷竞技电竞平台
在波特率57600时使用串行端口COM18。
按RESET。
上传引导加载程序/应用程序可执行文件...
可执行上传。
完毕。
但是当我尝试闪存pxp_reporter演示时或尝试删除闪存i,我总是得到以下错误:
在波特率57600时使用串行端口COM18。
使用Internal UartBoot.bin未指定引导加载程序文件
连接到设备......
将串口波特率设定为57600。
按RESET。
上传引导加载程序/应用程序可执行文件...
可执行上传。
将串口波特率设定为57600。
芯片擦除QSPI失败:收到无效的通知消息(-106)
因为它是第一次编程da14681,如果你对我有一个暗示 - 那么它会很棒 - 这可能是错误的!
非常感谢!
斯图加特 - 德国最好的问候
马丁
嗨Martin Thoma,
关于uartboot.bin的修改,uartboot.bin的原始Custom_Config.h文件具有DG_CONFIGFLASH_AUTODETECT到1,因为代码中的额外闪烁没有问题。因此,您可以将DG_CONFIGFLASH_AUTODETECT设置为1,并在Flash_AutoDetect定义下在QSPI_AUTOMODE.C中包含您的新闪存标题和qspi_flash_config_t。这将允许您为所有可用闪烁有一个uartboot.bin。
假设新支持的Flash的所有信息都是正确的,并且显然您已经构建了支持新闪光的新UartBoot.bin,问题是脚本正在使用CLI_Programmer才能与68x交互,CLI_Programmer嵌入auartboot.bin的版本,显然不支持新闪存(因为您没有更新)。因此,您必须做的是构建lib_programmer和cli_programmer,以便cli_programmer包含新创建的uartboot.bin支持额外的闪存设备。虽然如果构建CLI_Programmer,它将首先自动构建lib_programmer然后是Uartboot,最后是CLI_Programmer。
谢谢mt_dialog.
嗨mt_dialog,
感谢您的回复。我仍然存在闪烁QSPI的问题。我确实再次构建了uartboot.bin,lib和cli,而没有成功闪烁qspi。是什么让我奇怪的是:
在波特率57600时使用串行端口COM18。
使用Internal UartBoot.bin未指定引导加载程序文件
对我来说,看起来我必须将路径配置为“new”uartboot.bin。在CLI释放文件夹中重命名“UartBoot.bin”到“UartBoot2.bin”未显示任何错误但是在“引导加载程序未指定”之前的任何错误。设置路径可能在不存在的“CLI_PRIGHMER.INI”中完成。那么,当我想在smartsnippets studio中使用“program_qspi_serial_win”脚本时,我必须在哪里修改uartboot.bin的路径?
当使用-b命令从终端闪烁第二引导程序时,比脚本使用此引导加载程序?
非常感谢您的进一步提示。
此致,
马丁
嗨Martin Thoma,
如上所述,CLI_Programmer.exe包括UartBoot.bin的版本(当您构建CLI时,它会在UartBoot.bin文件中构建,这就是为什么在构建CLI时,Eclipse首先构建lib_programmer然后是Uartboot。垃圾箱和最后一个cli_programmer)。出现和提及“未指定的引导加载程序文件”的消息是指CLI_Programmer以通过命令行提供UartBoot.bin的选项,如果您不提供一个命令使用与之构建的文件。脚本使用的cli_programmer.exe位于SDK的二进制文件夹中,以便您自己检查此文件,您可以从二进制文件夹中删除此文件并重建CLI_Programmer项目,如果您这样做是新建的SW将是自动复制并放入二进制文件夹中,以便使用Eclipse,以便您不必使用-b选项。
我正在检查是否可以获得像你使用的闪光灯,以便检查。
谢谢mt_dialog.
嗨mt_dialog,
非常感谢您的支持!
“我正在检查是否可以获得像你使用的闪光灯以检查”
这真的很棒!
Bootloader文件中应该更改其他内容吗?我添加了新的驱动程序(也在qspi_automode.co中)并保留了dg_configflash_autodetect 1。
我想我必须继续使用调试器。只有使用UART似乎没有有效。
也许我正在做一些关于错误的事情。只是为了验证我的uartboot.bin我试图设置的RAM上运行
#define dg_configflash_connected_to(flash_is_not_connected)
#define dg_configflash_power_down(0)
#define dg_configflash_autodetect(0)
#define dg_configpower_1v8_active(0)
#define dg_configpower_1v8_sleep(0)
#define dg_configpower_1v8p(0)
然后执行例如e.erase_qspi_serial_win脚本。但我仍然可以测量1.8V(A8 / AQFN包)。我以为新的UartBoot.bin应该在RAM中运行,并将A8上的PWR输出设置为GND?
此致,
马丁
嗨Martin Thoma,
我能找到像你所拥有的那样的闪光,我能够通过JTAG擦除和编程它,我也能够通过串行来编程它,并且所有我都能够这样做,而无需改变自定义的Winbond驱动程序根本。我遇到的唯一问题是我无法以某种原因使用序列来删除闪光灯,因此即使使用未改变的SDK,我也能够使用该闪存。我还尝试了你在网上粘贴的修改显然你已经设置了quad_page_program_address = true,这是一个问题,将它设置为false,似乎它的工作。对于ersial来说,序列似乎这是CLI的时间问题,因为即使脚本提到擦除已经失败,闪光就会删除。
谢谢mt_dialog.
嗨mt_dialog,
非常感谢你的支持。但我仍然获得“收到的无效公告消息(-106)”
在构建LibProgrammer时,我收到以下消息:
23:34:37 ****配置释放的增量构建_static_win32对于项目libprogrammer ****
信息:配置“Reface_Static_Win32”使用在此系统上不支持的工具链“Mingw GCC”,尝试构建无论如何。一世
制作 - 所有人
23:34:37 Build完成(拍285ms)
这可能是问题吗?
此致,
马丁
嗨Martin Thoma,
不,它不应该引起你的任何问题,就像我提到的那样,即使是使用默认的闪光灯的默认驱动程序就可以编程设备,也可以尝试通过JTAG与Flash接口而不是通过UART。此外,在您使用的是SDK 1.0.10的情况下,请注意,在构建CLI_Programmer时不会更新二进制文件文件夹,以便您必须将新的.exe(新编译的一个)放在SDK的二进制文件夹中。
谢谢mt_dialog.