你好,
我有一个带有Winbond“W25Q32FW”的自定义板,并希望在QSPI上闪光PXP_roporter演示。
可惜到目前为止还没有成功。我目前所做的是:
1.为flash添加了一个新的头文件:DA1468x_SDK_BTLE_v_1.0.8.1050.1\sdk\bsp\memory\include\ qspi_w25q32fd .h
#ifndef _qspi_w25q32fw_h_
#define _qspi_w25q32fw_h_
#ifndef winbond_id.
#定义xef WINBOND_ID 0
# endif
//设备类型使用命令0x9f
#define w25q32fw 0x60
#ifndef w25q_32mb_size.
#定义W25Q_32Mb_SIZE 0 x16时
# endif
#if (FLASH_AUTODETECT == 1) || (dg_configFLASH_MANUFACTURER_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;
# endif
QSPI_SECTION static void flash_w25q32fw_sys_clock_cfg(sys_clk_t sys_clk)
{
}
qspi_section静态uint8_t flash_w25q32fw_get_dummy_bytes(void)
{
返回2;
}
# endif
#endif / * _qspi_w25q32fw_h_ * /
/**
* \}
* \}
* \}
*/
2.修改da1468x_sdk_btle_v_1.0.8.1050.1 \ sdk \ bsp \ system \ loaders \ uartboot \ config \ custom_config.h
#定义dg_configFLASH_CONNECTED_TO (FLASH_CONNECTED_TO_1V8)
#定义dg_configFLASH_POWER_DOWN (0)
#define dg_configflash_autodetect(0)
#define dg_configpower_1v8_active(1)
#定义dg_configPOWER_1V8_SLEEP (1)
#定义dg_configUSE_AUTO_CHIP_DETECTION (1)
#define dg_configpower_1v8p(1)
#include“bsp_definitions.h”
#定义OS_BAREMETAL
#定义__HEAP_SIZE 0 x2000
#定义dg_configUSE_LP_CLK LP_CLK_32768
#定义dg_configCODE_LOCATION NON_VOLATILE_IS_FLASH
#define dg_configext_crystal_freq ext_crystal_is_16m.
#定义dg_configIMAGE_SETUP DEVELOPMENT_MODE
#define dg_configemulate_otp_copy(0)
#define dg_configuser_can_use_timer1(1)
#define dg_configmem_retention_mode(0x1f)
#定义dg_configSHUFFLING_MODE段(0 x3)
#define dg_configuse_wdog(0)
#定义dg_configUSE_BOD (0)
#define dg_configuse_dcdc(1)
#定义dg_configFLASH_CONNECTED_TO (FLASH_CONNECTED_TO_1V8)
#定义dg_configFLASH_POWER_DOWN (0)
#define dg_configflash_autodetect(0)
#define dg_configpower_1v8_active(1)
#定义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.
#定义dg_configUSE_ProDK (1)
#define dg_configuse_sw_cursor(1)
#define dg_configuse_hw_rf 0.
#定义dg_configUSE_AUTO_CHIP_DETECTION (1)
#define dg_configpower_1v8p(1)
#定义dg_configDISABLE_BACKGROUND_FLASH_OPS (1)
#定义dg_configCRYPTO_ADAPTER (0)
#定义dg_configUSE_HW_WKUP (0)
#define dg_configsuppress_hellomeg(0)
#定义dg_configVERIFY_QSPI_WRITE (1)
#定义dg_configFLASH_ADAPTER (1)
#定义dg_configNVMS_ADAPTER (1)
#define dg_confignvms_ves(1)
#define dg_configflash_header_file“qspi_w25q32fw.h”
#定义dg_configFLASH_MANUFACTURER_ID WINBOND_ID
#定义dg_configFLASH_DEVICE_TYPE W25Q32FW
#define dg_configflash_denty w25q_32mb_size.
#define dg_configflash_max_write_size(256)
3.编译DiaSemi \ DA1468x_SDK_BTLE_v_1.0.8.1050.1 \ sdk \ bsp \ \装入器\ uartboot系统
4.通过串行使用CLI_Programmer Flash UartBoot.bin
cli_programmer 1.23
版权所有(c) 2016 Dialog雷竞技电竞平台 Semiconductor
在波特率57600时使用串行端口COM18。
按RESET。
上传引导加载程序/应用程序可执行文件...
可执行文件上传。
完成了。
但当我尝试flash的pxp_reporter演示或尝试擦除flash,我总是得到以下错误:
在波特率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头文件和qspi_flash_config_t包含在FLASH_AUTODETECT定义的qspi_autommode .c中。这将允许您有一个uartboot.bin用于所有可用的flash。
假设所有新支持的flash的信息都是正确的,显然你已经构建了新的uartboot.bin,它支持新的flash,问题是脚本使用cli_programmer,以便与68x,cli_programmer嵌入了一个显然不支持新flash的uartboot.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未指定引导加载程序文件
对我来说,似乎我必须将路径配置为“新的”uartboot.bin。在命令行Release文件夹中,将“uartboot.bin”重命名为“uartboot.bin”不会显示任何错误,但与之前的“bootloader not specified”相同的消息。设置路径可以在不存在的“cli_programmer.ini”中完成。所以当我想在smartsnippets工作室中使用“program_qspi_serial_win”脚本时,我必须在哪里修改uartboot.bin的路径?
当使用-b命令从终端闪烁第二引导程序时,比脚本使用此引导加载程序?
非常感谢你的进一步提示。
最好的问候,
马丁
嗨Martin Thoma,
如上所述,cli_programmer.exe包含一个版本的uartboot.bin(当你构建cli时,它是用uartboot.bin文件构建的,这就是为什么当你构建cli时,eclipse首先构建lib_programmer,然后是uartboot.bin,最后是cli_programmer)。出现的消息提到“bootloader file not specified”指的是cli_programmer的选项,通过命令行提供uartboot.bin,如果你不提供一个命令使用的文件构建。脚本使用的cli_programmer.exe位于SDK的二进制文件文件夹,为了检查这个为自己可以从二进制文件中删除这个文件文件夹和重建cli_programmer项目,如果你新建立的sw将自动被复制并放置在二进制文件文件夹中,eclipse使用,所以你不需要使用-b选项。
我正在检查是否可以获得像你使用的闪光灯,以便检查。
谢谢mt_dialog.
嗨mt_dialog,
非常感谢您的支持!
"我在检查我是否能得到一个像你用的那样的闪光"
这真是太棒了!
在引导加载程序文件中还有什么需要修改的吗?我已经添加了新的驱动程序(也在qspi_automode.c中),并保留dg_configFLASH_AUTODETECT 1。
我想我必须继续使用调试器。只有使用UART似乎没有有效。
也许我正在做一些关于错误的事情。只是为了验证我的uartboot.bin我试图设置的RAM上运行
#定义dg_configFLASH_CONNECTED_TO (FLASH_IS_NOT_CONNECTED)
#定义dg_configFLASH_POWER_DOWN (0)
#define dg_configflash_autodetect(0)
#define dg_configpower_1v8_active(0)
#定义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,
我能够找到一个flash像你,和我能够消除程序通过JTAG,我也能够通过串行程序它,最重要的是我能够这样做,而无需改变自定义华邦电子驱动程序。我遇到的唯一问题是,我不能使用串行擦除flash由于某些原因,所以我相信,即使使用一个未更改的SDK,您将能够使用该flash。我还尝试了修改,你已经粘贴在线显然你已经设置了quad_page_program_address = true,这是一个问题,设置它为假,它似乎是工作的。对于通过串行擦除,似乎这是一个cli的时间问题,因为据我所知,即使脚本提到擦除失败,闪光被擦除。
谢谢mt_dialog.
嗨mt_dialog,
非常感谢您的支持。但是我仍然收到“无效的公告消息(-106)”
在构建LibProgrammer时,我收到以下消息:
23:34:37 ****配置释放的增量构建_static_win32对于项目libprogrammer ****
配置“Release_static_win32”使用工具链“MinGW GCC”,这在这个系统上是不支持的,试图构建。一世
制作 - 所有人
23:34:37 Build完成(拍285ms)
这可能是问题所在吗?
最好的问候,
马丁
嗨Martin Thoma,
不,它不应该导致您任何问题,正如我所提到的,我能够编程的设备,甚至与默认的闪存默认驱动程序,你尝试过,而且,你是否试图通过JTAG接口的flash,而不是通过UART。另外,如果你正在使用SDK 1.0.10,请注意,当构建cli_programmer将不会更新二进制文件夹,所以你必须将新的.exe(新编译的一个)放在SDK的二进制文件夹中。
谢谢mt_dialog.