嗨,对话工程师,
我使用了Murata Type-ZF板,该ZF板是基于DA14580的,电路板具有2M位SPI Flash(W25x20CL),现在我已经将程序代码闪烁到SPI并从中启动。现在,它运作正常。
但是,我必须保存一些数据,例如远程设备地址和一些其他信息到SPI,因此我可以在重置后执行与上一个设备的定向连接。我在app_bond_db.c和app_bond_db.h中阅读了一些代码。
我用这种方式打电话给了一些API:
1,在periph_init()中配置SPI GPIO,
gpio_configurepin(spi_gpio_port,spi_clk_pin,input_pullup,pid_spi_clk,false);
gpio_configurepin(spi_gpio_port,spi_cs_pin,input_pulldown,pid_spi_en,false);
gpio_configurepin(spi_gpio_port,spi_do_pin,输出,pid_spi_do,false);
gpio_configurepin(spi_gpio_port,spi_di_pin,input_pulldown,pid_spi_di,false);
2,函数system_init()中的periph_init()之后调用bond_db_init()
void bond_db_init(void)
{
//从外部内存资源加载键数据
bond_db_load_flash();
//在内存中简单检查垃圾(这也捕获了清除内存的0xFF)
if((bdb.next_slot> app_bond_db_max_bonded_peers)||
(bdb.start_hdr!= bond_db_header_start)||(bdb.end_hdr!= bond_db_header_end))))
{
bond_db_clear();
}
}
3,在某个地方我需要保存数据,调用函数bond_db_store_at_idx()
void bond_db_store_at_idx(struct bond_db_data * data,int idx)
{
//更新缓存
memcpy(&bdb.data [idx],data,sizeof(struct bond_db_data));
bond_db_store_flash();
}
但是,我从来没有成功编写SPI,以下是一些调试信息
1,spi_flash_enable alway返回spi_flash_auto_detect_not_detected在function bond_db_spi_flash_init中。我的spi falsh是w25x20_,它由spi_flash diver支持
2,bond_db_erase_flash_sectors返回函数bond_db_store_flash中的err_timeout,因此我无法将数据写入flash。
3,spi_flash_wait_till_ready始终返回err_timeout
我是DA14580的新手,有人可以给出一些建议,或者da有一步一步到踏上用于程序外部SPI闪光灯的指南吗?
先感谢您!

嗨Chris0409,
似乎在580和闪存之间存在沟通问题,可能出于某种原因,闪光变为无响应,这就是为什么运行SPI_FLASH_ENABLE()函数时,SPI_FLASH_AUTO_DETECT()运行以查看闪存是任何已知闪光由SDK支持,因此在启用Flash检查闪存返回的jedec_id时。关于超时我想从SPI_FLASH_WAIT_TILL_REDE()函数来看,SDK提示闪存才能检查它是否准备好接受命令,此提示发生在MAX_READY_WAIT_COUNT,如果闪光灯的状态从未从Status_busy出来时PROMT由580开始,然后设备将返回ERR_TIMEOUT。
检查您的SPI_EN PIN,我看到它已将其配置为输入,但这应该是输出,因为580应该控制SPI的CS并将其设置为TRUE,因为FALSE将在所有时间都启用闪光灯不在互动期间。
谢谢mt_dialog.