嗨,对话框:
我在我的项目中使用闪存(16m字节)使用da14580。订单以使其工作:
1> spi_flash .h,我添加如下代码:
// 5. W25Q128JV(128MB / 16MB)
#define spi_flash_device_index_w25q128jv 4.
#定义xef17 W25Q128JV_MAN_DEV_ID 0
#define w25q128jv_jedec_id 0xef4018.
#定义W25Q128JV_JEDEC_ID_MATCHING_BITMASK 0 xffffff
#define w25q128jv_total_flash_size 0x20000 // 0x40000 // 0xffffff // 0x1000000 // 16m = 0x1000000
#define w25q128jv_page_size 0x100.
#define w25q128jv_mem_prot_bitmask(0x1c)
#define w25q128jv_mem_prot_none 0.
#define w25q128jv_mem_prot_upper_quarter 4.
#define w25q128jv_mem_prot_upper_half 8.
#define w25q128jv_mem_prot_lower_quarter 36.
#define w25q128jv_mem_prot_lower_half 40.
#定义W25Q128JV_MEM_PROT_ALL 12
2>在spi_flash.c中添加代码
const spi_flash_device_parameters_by_jedec_id_t spi_flash_known_devices_parameters_list [] =
{
{w25x10_jedec_id,w25x10_jedec_id_matching_bitmask,w25x10_total_flash_size,w25x10_page_size,w25x_mem_prot_bitmask,w25x10_mem_prot_none},
{W25X20_JEDEC_ID, W25X20_JEDEC_ID_MATCHING_BITMASK, W25X20_TOTAL_FLASH_SIZE, W25X20_PAGE_SIZE, w25x20_mem_prot_bitmask, W25x20_MEM_PROT_NONE},
{at25dx011_jedec_id,at25dx011_jedec_id_matching_bitmask,at25dx011_total_flash_size,at25dx011_page_size,at25dx011_mem_prot_bitmask,at25dx011_mem_prot_none},
{mx25v1006e_jedec_id,mx25v1006e_jedec_id_matching_bitmask,mx25v1006e_total_flash_size,mx25v1006e_page_size,mx25v1006e_mem_prot_bitmask,mx25v1006e_mem_prot_none},
{w25q128jv_jedec_id,w25q128jv_jedec_id_matching_bitmask,w25q128jv_total_flash_size,w25q128jv_page_size,w25q128jv_mem_prot_bitmask,w25q128jv_mem_prot_none},
};
3>编译程序员项目并获得flash_programmer.bin
4>将bin文件复制到d:\ app \ smartsnippets3.9 \ workspace \资源;
5>运行smartsnippet3.9并连接da14580与uart
[动作@ 17-09-29 19:09:10]请按电路板上的硬件重置按钮开始下载过程。
[INFO @ 17-09-29 19:09:14]重置检测到
[INFO @17-09-29 19:09:16]成功连接COM5端口。
[INFO @17-09-29 19:09:16] COM5端口连接成功。
[INFO @17-09-29 19:09:16]成功连接COM5端口。
[INFO @17-09-29 19:09:16]成功下载固件文件到单板。
[INFO @17-09-29 19:09:16]成功配置SPI Flash接口和引脚。
6>在smartsnippet3.9中填充偏移量0x0,并单击按钮(擦除扇区)
[INFO @17-09-29 19:11:52] COM5端口连接成功。
[INFO @17-09-29 19:11:52]成功断开COM5端口连接。
[info @ 17-09-29 19:11:52] SPI记忆擦除成功完成。
[INFO @17-09-29 19:11:52]擦除后读取内存以验证其内容…
[INFO @17-09-29 19:11:52] COM5端口连接成功。
[info @ 17-09-29 19:11:53]成功与COM5端口断开连接。
[INFO @17-09-29 19:11:53]验证成功。
[INFO @17-09-29 19:11:53]读取内存刷新表内容....
[信息@ 17-09-29 19:11:54]与COM5端口的连接已成功打开。
[信息@ 17-09-29 19:12:00]成功与COM5端口断开了连接。
[info @ 17-09-29 19:12:00]阅读已经完成了。阅读32768字节。
7>更改偏移量为0x20000,然后单击按钮(擦除扇区),似乎都很好。
[信息@ 17-09-29 19:15:19]与COM5端口的连接已成功打开。
[info @ 17-09-29 19:15:20]成功与COM5端口断开了连接。
[info @ 17-09-29 19:15:20] SPI记忆擦除成功完成。
[info @ 17-09-29 19:15:20]阅读内存以验证其内容擦除后...
[INFO @17-09-29 19:15:20] COM5端口连接成功。
[信息@ 17-09-29 19:15:21]成功与COM5端口断开连接。
[INFO @17-09-29 19:15:21]验证成功。
[info @ 17-09-29 19:15:21]阅读内存以刷新表内容....
[信息@ 17-09-29 19:15:21]与COM5端口的连接已成功打开。
[Info @ 17-09-29 19:15:27]从COM5端口已成功断开连接。
[info @ 17-09-29 19:15:27]阅读已完成。阅读32768字节。
8>将偏移量改为0x0,然后单击erase按钮。and RED ERROR comes:(timeout happened)
[信息@ 17-09-29 19:15:21]与COM5端口的连接已成功打开。
[Info @ 17-09-29 19:15:27]从COM5端口已成功断开连接。
[info @ 17-09-29 19:15:27]阅读已完成。阅读32768字节。
[信息@ 17-09-29 19:17:26]与COM5端口的连接已成功打开。
[错误@ 17-09-29 19:17:36]超时等待收到数据包长度最高的字节(10000毫秒)
[Info @ 17-09-29 19:17:36]成功与COM5端口断开连接。
[ERROR @17-09-29 19:17:36] SPI内存擦除失败。
9>我尝试更改max_ready_wait_count,但没有什么不同。
#define max_ready_wait_count(0xffffffff)// 2000000 * 10
10>我删除了第一个扇区并将App_Image下载到Flash,然后将App运行正常。
我尝试重新定义W25Q128JV_TOTAL_FLASH_SIZE的值为其他,0x20000,40000,80000等等,我得到了相同的结果。
问题:
我怎么能擦除flash与一个点击擦除按钮,至少从0x0~0x20000?因为我有多个图像(bootloader,app,font_resource)需要烧成flash。
谢谢!
嗨Kurbylee,
也许你可以尝试使用新的智能片段工具箱,并试一试,我没有看到你在代码中所拥有的添加中的任何东西。还会在您不要推擦扇区时会发生什么,并且您在智能片段版本上点击擦除命令?也无论智能片段报告如何检查闪光灯是否被删除了?
谢谢mt_dialog.
谢谢!
我通过在函数spi_flash_chip_erase中添加如下代码解决了这个问题:
int8_t spi_flash_chip_erase(空白)
{
UINT8_T状态;
if (spi_flash_set_write_enable() != ERR_OK) //发送[Write Enable]指令
返回err_timeout;
if(spi_flash_size <0x40000)
{
spi_set_bitmode(spi_mode_8bit);
spi_transaction(chip_erase);//芯片擦除命令
status = spi_flash_wait_till_ready();
}
别的
{
UINT32_T地址= 0;
/ /当(address0x40000
而(地址<0x40000)
{
spi_flash_block_erase(地址、BLOCK_ERASE_64);
status = spi_flash_wait_till_ready();
如果(状态!= err_ok)中断;
地址+ = 64 * 1024;
}
}
返回状态;
}
嗨Kurbylee,
感谢您的表明,希望它将有助于很多用户。
MT_dialog问好