闪烁定制QSPI - Winbond W25Q32FW

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
8个帖子/ 0新
最后一篇
马丁·科麦米
离线
最后一次露面:3年8个月前
加入:2017-02-23 14:34
闪烁定制QSPI - Winbond W25Q32FW

你好,
我有一个带有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.
# 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静态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)
#define 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”

#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)
#定义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)
#define 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)

#define dg_configdisable_background_flash_ops(1)

#define dg_configcrypto_adapter(0)

#定义dg_configUSE_HW_WKUP (0)

#define dg_configsuppress_hellomeg(0)

#define dg_configverify_qspi_write(1)

#define dg_configflash_adapter(1)
#定义dg_configNVMS_ADAPTER (1)
#define dg_confignvms_ves(1)

#define dg_configflash_header_file“qspi_w25q32fw.h”
#define 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,如果你对我有一个暗示 - 那么它会很棒 - 这可能是错误的!

非常感谢!
斯图加特 - 德国最好的问候
马丁

设备:
mt_dialog.
离线
最后一次露面:4个月1日前
职员
加入:2015-06-08 34
嗨Martin Thoma,

嗨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,问题是脚本正在使用CLI_Programmer才能与68x交互,CLI_Programmer嵌入auartboot.bin的版本,显然不支持新闪存(因为您没有更新)。因此,您必须做的是构建lib_programmer和cli_programmer,以便cli_programmer包含新创建的uartboot.bin支持额外的闪存设备。虽然如果构建CLI_Programmer,它将首先自动构建lib_programmer然后是Uartboot,最后是CLI_Programmer。

谢谢mt_dialog.

马丁·科麦米
离线
最后一次露面:3年8个月前
加入:2017-02-23 14:34
嗨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命令从终端闪烁第二引导程序时,比脚本使用此引导加载程序?

非常感谢你的进一步提示。

此致,
马丁

mt_dialog.
离线
最后一次露面:4个月1日前
职员
加入:2015-06-08 34
嗨Martin Thoma,

嗨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.

马丁·科麦米
离线
最后一次露面:3年8个月前
加入:2017-02-23 14:34
嗨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)
#定义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?

此致,
马丁

mt_dialog.
离线
最后一次露面:4个月1日前
职员
加入:2015-06-08 34
嗨Martin Thoma,

嗨Martin Thoma,

我能够找到一个flash像你,和我能够消除程序通过JTAG,我也能够通过串行程序它,最重要的是我能够这样做,而无需改变自定义华邦电子驱动程序。我遇到的唯一问题是,我不能使用串行擦除flash由于某些原因,所以我相信,即使使用一个未更改的SDK,您将能够使用该flash。我还尝试了修改,你已经粘贴在线显然你已经设置了quad_page_program_address = true,这是一个问题,设置它为假,它似乎是工作的。对于通过串行擦除,似乎这是一个cli的时间问题,因为据我所知,即使脚本提到擦除失败,闪光被擦除。

谢谢mt_dialog.

马丁·科麦米
离线
最后一次露面:3年8个月前
加入:2017-02-23 14:34
嗨mt_dialog,

嗨mt_dialog,
非常感谢您的支持。但是我仍然收到“无效的公告消息(-106)”
在构建LibProgrammer时,我收到以下消息:

23:34:37 ****配置释放的增量构建_static_win32对于项目libprogrammer ****
配置“Release_static_win32”使用工具链“MinGW GCC”,这在这个系统上是不支持的,试图构建。一世
制作 - 所有人

23:34:37 Build完成(拍285ms)

这可能是问题吗?
此致,
马丁

mt_dialog.
离线
最后一次露面:4个月1日前
职员
加入:2015-06-08 34
嗨Martin Thoma,

嗨Martin Thoma,

不,它不应该引起你的任何问题,就像我提到的那样,即使是使用默认的闪光灯的默认驱动程序就可以编程设备,也可以尝试通过JTAG与Flash接口而不是通过UART。此外,在您使用的是SDK 1.0.10的情况下,请注意,在构建CLI_Programmer时不会更新二进制文件文件夹,以便您必须将新的.exe(新编译的一个)放在SDK的二进制文件夹中。

谢谢mt_dialog.