大家好,
我有一个自定义板与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_
#定义_QSPI_W25Q32FW_H_
的ifndef WINBOND_ID
#定义xef WINBOND_ID 0
#万一
//设备类型使用命令0x9F
#定义x60 W25Q32FW 0
的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_DENSITY == 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(无效);
Static const qspi_flash_config_t flash_w25q32fw_config = {
.manufacturer_id = WINBOND_ID,
.device_type = W25Q32FW,
.device_density = W25Q_32Mb_SIZE,
.is_suspended = 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 = 0 xa0,
.ucode_wakeup = {w25q_ucode_wakeup, sizeof(w25q_ucode_wakeup)}
.power_down_delay = W25Q_POWER_DOWN_DELAY_US,
.release_power_down_delay = W25Q_RELEASE_POWER_DOWN_DELAY_US,
};
#如果(FLASH_AUTODETECT == 0)
Const qspi_flash_config_t* Const flash_config = &flash_w25q32fw_config;
#万一
QSPI_SECTION static void flash_w25q32fw_sys_clock_cfg(sys_clk_t sys_clk)
{
}
flash_w25q32fw_get_dummy_bytes(void)
{
返回2;
}
#万一
#endif /* _QSPI_W25Q32FW_H_ */
/**
* \}
* \}
* \}
* /
2.修改DA1468x_SDK_BTLE_v_1.0.8.1050.1 \ sdk \ bsp \ \装载机\ uartboot \ config \ custom_config.h系统
#define dg_configflash_connected_to(flash_connected_to_1v8)
#定义dg_configFLASH_POWER_DOWN (0)
#定义dg_configFLASH_AUTODETECT (0)
#定义dg_configPOWER_1V8_ACTIVE (1)
#define dg_configpower_1v8_sleep(1)
#define dg_configuse_auto_chip_detection(1)
#定义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
#定义dg_configEXT_CRYSTAL_FREQ EXT_CRYSTAL_IS_16M
#定义dg_configIMAGE_SETUP DEVELOPMENT_MODE
#定义dg_configEMULATE_OTP_COPY (0)
#定义dg_configUSER_CAN_USE_TIMER1 (1)
#定义dg_configMEM_RETENTION_MODE (0 x1f)
#define dg_configshuffling_mode(0x3)
#定义dg_configUSE_WDOG (0)
#define dg_configuse_bod(0)
#定义dg_configUSE_DCDC (1)
#define dg_configflash_connected_to(flash_connected_to_1v8)
#定义dg_configFLASH_POWER_DOWN (0)
#定义dg_configFLASH_AUTODETECT (0)
#定义dg_configPOWER_1V8_ACTIVE (1)
#define dg_configpower_1v8_sleep(1)
#定义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 //禁用
#定义dg_configUSE_USB 0
#定义dg_configUSE_USB_CHARGER 0
#定义dg_configALLOW_CHARGING_NOT_ENUM 1
#define dg_configuse_prodk(1)
#定义dg_configUSE_SW_CURSOR (1)
#定义dg_configUSE_HW_RF 0
#define dg_configuse_auto_chip_detection(1)
#定义dg_configPOWER_1V8P (1)
#定义dg_configDISABLE_BACKGROUND_FLASH_OPS (1)
#定义dg_configCRYPTO_ADAPTER (0)
#define dg_configuse_hw_wkup(0)
#定义dg_configSUPPRESS_HelloMsg (0)
#定义dg_configVERIFY_QSPI_WRITE (1)
#定义dg_configFLASH_ADAPTER (1)
#define dg_confignvms_adapter(1)
#定义dg_configNVMS_VES (1)
#定义dg_configFLASH_HEADER_FILE“qspi_w25q32fw.h”
#定义dg_configFLASH_MANUFACTURER_ID WINBOND_ID
#define dg_configflash_device_type w25q32fw
#定义dg_configFLASH_DENSITY W25Q_32Mb_SIZE
#定义dg_configFLASH_MAX_WRITE_SIZE (256)
3.编译diasemi \ da1a68x_sdk_btle_v_1.0.8.1050.1 \ sdk \ bsp \ system \ loaders \ uartboot
4.Flash uartboot.bin与cli_programmer通过串行
cli_programmer 1.23
版权所有(c)2016年对话半导体雷竞技电竞平台
串口为COM18,波特率为57600。
按下复位。
上传引导加载程序/应用程序可执行文件…
可执行上传。
完毕。
但是当我尝试闪存pxp_reporter演示时或尝试删除闪存i,我总是得到以下错误:
串口为COM18,波特率为57600。
未指定引导加载程序文件,使用内部uartboot.bin
连接到设备……
设置串口波特率为57600。
按下复位。
上传引导加载程序/应用程序可执行文件…
可执行上传。
设置串口波特率为57600。
芯片erase QSPI failed: invalid announcement message received (-106)
因为这是我第一次编程的da14681,它真的会很好,如果你有一个提示给我-什么可能是错误的!
非常感谢!
从德国斯图加特向您致以最诚挚的问候
马丁
嗨,马丁•托马
关于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,它支持新的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。让我好奇的是:
串口为COM18,波特率为57600。
未指定引导加载程序文件,使用内部uartboot.bin
对我来说,看起来我必须将路径配置为“new”uartboot.bin。在CLI释放文件夹中重命名“UartBoot.bin”到“UartBoot2.bin”未显示任何错误但是在“引导加载程序未指定”之前的任何错误。设置路径可能在不存在的“CLI_PRIGHMER.INI”中完成。那么,当我想在smartsnippets studio中使用“program_qspi_serial_win”脚本时,我必须在哪里修改uartboot.bin的路径?
当用-b命令从终端闪烁第二个引导加载程序时,脚本会使用这个引导加载程序吗?
非常感谢您的进一步提示。
最好的问候,
马丁
嗨,马丁•托马
如上所述,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上运行
#定义dg_configFLASH_CONNECTED_TO (FLASH_IS_NOT_CONNECTED)
#定义dg_configFLASH_POWER_DOWN (0)
#定义dg_configFLASH_AUTODETECT (0)
#定义dg_configPOWER_1V8_ACTIVE (0)
#define dg_configpower_1v8_sleep(0)
#定义dg_configPOWER_1V8P (0)
然后执行例如:erase_qspi_serial_win脚本。但我仍然可以测量1.8V (A8 / aQFN封装)。我认为新的uartboot.bin应该在ram中运行,并将A8上的pwr输出设置为gnd?
最好的问候,
马丁
嗨,马丁•托马
我能找到像你所拥有的那样的闪光,我能够通过JTAG擦除和编程它,我也能够通过串行来编程它,并且所有我都能够这样做,而无需改变自定义的Winbond驱动程序根本。我遇到的唯一问题是我无法以某种原因使用序列来删除闪光灯,因此即使使用未改变的SDK,我也能够使用该闪存。我还尝试了你在网上粘贴的修改显然你已经设置了quad_page_program_address = true,这是一个问题,将它设置为false,似乎它的工作。对于ersial来说,序列似乎这是CLI的时间问题,因为即使脚本提到擦除已经失败,闪光就会删除。
由于MT_dialog
嗨MT_dialog,
非常感谢你的支持。但我仍然获得“收到的无效公告消息(-106)”
当构建libprogrammer时,我得到以下消息:
23:34:37 **** Incremental Build of configuration Release_static_win32 for project libprogrammer ****
信息:配置“Reface_Static_Win32”使用在此系统上不支持的工具链“Mingw GCC”,尝试构建无论如何。我
使——沉默
23:34:37建造完成(耗时285ms)
这可能是问题所在吗?
最好的问候,
马丁
嗨,马丁•托马
不,它不应该导致您任何问题,正如我所提到的,我能够编程的设备,甚至与默认的闪存默认驱动程序,你尝试过,而且,你是否试图通过JTAG接口的flash,而不是通过UART。另外,如果你正在使用SDK 1.0.10,请注意,当构建cli_programmer将不会更新二进制文件夹,所以你必须将新的.exe(新编译的一个)放在SDK的二进制文件夹中。
由于MT_dialog