这边需要闪光存储当前的设备名称,设mac修改,发布闪存无法对变进行存储,应该是我的使用方便不行,能能我在延伸睡眠状态模式下使用闪光,另外给我发表,在存储绑定信仰,当闪光法工作的时代,我签用bond_db_store_ext()后,设备自动打开连接,应该是flash anys正常工作组,我把这频闭后后能正常连接。
flash初始化代码如下:
void spi_flash_peripheral_init(void)
{
spi_FLASH_CS_Pad.pin = SPI_CS_PIN;
spi_flash_cs_pad.port = spi_gpio_port;
// Enable SPI & SPI FLASH
spi_init(&spi_FLASH_CS_Pad, SPI_MODE_8BIT, SPI_ROLE_MASTER, SPI_CLK_IDLE_POL_LOW, SPI_PHA_MODE_0, SPI_MINT_DISABLE, SPI_XTAL_DIV_8);
//detected_spi_flash_device_index = spi_flash_auto_detect();
// if(detected_spi_flash_device_index == SPI_FLASH_AUTO_DETECT_NOT_DETECTED)
// {
// The device was not identified.
// The default parameters are used (SPI_FLASH_SIZE, SPI_FLASH_PAGE)
// Alternatively, an error can be asserted here.
spi_flash_init(SPI_FLASH_DEFAULT_SIZE, SPI_FLASH_DEFAULT_PAGE);
// }
spi_flash_release_from_power_down();
spi_cs_low();
spi_cs_high();
}
希望能尽快得到解决。
非常感谢。
你好,
你的描述中包含太多情况的说明,我们先把这些情况缕清一下?
1、你的硬件环境是官方的开发板吗?如果不是,flash 型号是什么?
2,你的软件,能在官方开发板上正常运行吗?
3、不使能睡眠模式(extend sleep),当前 flash 可以读、写数据吗?
4、使能睡眠模式(extend sleep)之后,flash 是否还可以读写?
5、调用 bond_db_store_ext() 之后,设备自动断开连接,是设备死机了吗?蓝牙是否还有广播?
你好,CYibin
1、我使用的是自定义板子,flash信号为w25x10。
2、我使用官方的SDK5.0.4中的spi_flash例程 是能够对flash进行操作的。
3、我尝试不在睡眠模式下使用flash,发现也没有成功,应该是DSPS例程的原因,我使用DEMO板单独将flash添加在DSPS例程,将代码下在flash,初始化后清除所有flash数据,发现flash数据还在,应该是我没有正确的对flash进行操作。
可以是我是在dsps下闪存的下面闪神,我是,能告诉我如何正式的在DSPs手程下对闪光行作业吗。
system_init();
spi_flash_peripheral_init();
spi_cs_low();
spi_cs_high();
// Erase flash
spi_flash_chip_erase()
void spi_flash_peripheral_init()
{
spi_FLASH_CS_Pad.pin = SPI_CS_PIN;
spi_flash_cs_pad.port = spi_gpio_port;
// Enable SPI & SPI FLASH
spi_init(&spi_FLASH_CS_Pad, SPI_MODE_8BIT, SPI_ROLE_MASTER, SPI_CLK_IDLE_POL_LOW, SPI_PHA_MODE_0, SPI_MINT_DISABLE, SPI_XTAL_DIV_8);
detected_spi_flash_device_index = spi_flash_auto_detect();
//if(detected_spi_flash_device_index == SPI_FLASH_AUTO_DETECT_NOT_DETECTED)
//{
// The device was not identified.
// The default parameters are used (SPI_FLASH_SIZE, SPI_FLASH_PAGE)
// Alternatively, an error can be asserted here.
spi_flash_init(SPI_FLASH_SIZE, SPI_FLASH_PAGE);
//}
}
int8_t spi_flash_chip_erase(void)
{
uint8_t status;
if(spi_flash_set_write_enable()!= err_ok)//发送[写入启用]指令
return ERR_TIMEOUT;
spi_set_bitmode(SPI_MODE_8BIT);
spi_transaction(CHIP_ERASE); // Command for Chip Erase
status = spi_flash_wait_till_ready();
return status;
}
希望能尽快得到解决。
非常感谢。
你好,
是否有引出 jtag 接口,通过单步调试,看 flash 操作卡在了哪一步?
我使用官方的板子进行调试,发现一样在DSPS例程下无法使flash工作。
1、通过单步调试,我发现官方的spi_flash例程中,spi_flash_chip_erase()这句函数执行时间相较于DSPS例程短很多。
2,在DSPS过程中,进入SPI_FLASH_CHIP_ERASE()参数后,经常会卡在(getBits16(SPI_CTRL_REG,SPI_INT_BIT)== 0);//调查等待SPI传输,通过单击突破后,又能继续,执行很长一段时空后后后执行完spi_flash_chip_erase()。
3、spi_flash例程能够在执行完spi_flash_chip_erase()后将flash的内容全部删除,而DSPS例程毫无反应。
我在DSPS例程中添加了如下代码:
闪光闪光IO口
void set_pad_functions(void) // set gpio port function mode
{
/ *
*配置应用程序端口。
i.e.
GPIO_ConfigurePin( GPIO_PORT_0, GPIO_PIN_1, OUTPUT, PID_GPIO, false ); // Set P_01 as Generic purpose Output
*/
gpio_configurepin(gpio_uart1_tx_port,gpio_uart1_tx_pin,输出,pid_uart1_tx,false);
GPIO_ConfigurePin( GPIO_UART1_RX_PORT, GPIO_UART1_RX_PIN, INPUT_PULLUP, PID_UART1_RX, false );
GPIO_ConfigurePin(SPI_GPIO_PORT, SPI_CS_PIN, OUTPUT, PID_SPI_EN, true);
GPIO_ConfigurePin(SPI_GPIO_PORT, SPI_CLK_PIN, OUTPUT, PID_SPI_CLK, false);
GPIO_ConfigurePin(SPI_GPIO_PORT, SPI_DO_PIN, OUTPUT, PID_SPI_DO, false);
GPIO_ConfigurePin(SPI_GPIO_PORT, SPI_DI_PIN, INPUT, PID_SPI_DI, false);
#if (UART_HW_FLOW_ENABLED)
GPIO_ConfigurePin( GPIO_UART1_RTS_PORT, GPIO_UART1_RTS_PIN, OUTPUT, PID_UART1_RTSN, false );
GPIO_ConfigurePin (GPIO_UART1_CTS_PORT GPIO_UART1_CTS_PIN, INPUT_PULLUP, PID_UART1_CTSN, false );
#endif //UART_HW_FLOW_ENABLED
#ifdef cfg_printf_uart2.
gpio_configurepin(gpio_uart2_tx_port,gpio_uart2_tx_pin,输出,pid_uart2_tx,false);
GPIO_ConfigurePin( GPIO_UART2_RX_PORT, GPIO_UART2_RX_PIN, INPUT, PID_UART2_RX, false );
#endif
}
主函数
int main_func(void)
{
sleep_mode_t sleep_mode;
//global initialise
system_init();
spi_flash_peripheral_init();
spi_cs_low();
spi_cs_high();
// Erase flash
spi_flash_chip_erase();
/ *
************************************************************************************
* Platform initialization
************************************************************************************
*/
而(1)
{
do {
// schedule all pending events
schedule_while_ble_on();
}
while ((app_asynch_proc())); //grant control to the application, try to go to power down
//if the application returns GOTO_SLEEP
//((STREAMDATA_QUEUE)&& stream_queue_more_data())); //grant control to the streamer, try to go to power down
//if the application returns GOTO_SLEEP
//wait for interrupt and go to sleep if this is allowed
if (((!BLE_APP_PRESENT) && (check_gtl_state())) ||
(ble_app_present))
{
//Disable the interrupts
GLOBAL_INT_STOP();
app_asynch_sleep_proc();
// get the allowed sleep mode
// time from rwip_power_down() to WFI() must be kept as short as possible!!
sleep_mode = rwip_power_down();
if ((sleep_mode == mode_ext_sleep) || (sleep_mode == mode_deep_sleep)) {
//power down the radio and whatever is allowed
arch_goto_sleep(sleep_mode);
//wait for an interrupt to resume operation
WFI();
//resume operation
ARCH_RESUME_FROM_SLEEP();
}
else if (sleep_mode == mode_idle)
{
if (((!BLE_APP_PRESENT) && check_gtl_state()) ||
(ble_app_present))
//wait for an interrupt to resume operation
WFI();
}
// restore interrupts
global_int_start();
}
if (USE_WDOG)
wdg_reload(watchdog_default_period);
}
}
关闭睡眠
#undef cfg_mem_map_ext_sleep.
#undef CFG_MEM_MAP_DEEP_SLEEP
关闭开门狗
#undef CFG_WDOG
关键词模式
#undef CFG_DEVELOPMENT_DEBUG
你好,
关闭睡眠的方式不对,应该是 const static sleep_state_t app_default_sleep_mode = ARCH_SLEEP_OFF;
请尝试后回复结果
关键词尝试也不行,可以给我一击闪光在DSPS过程下成成都使嘛,闪光灯,闪光灯,为W25X10。
不好,目前官方无所无息可所提问题没解决释放。若问题还没解决,你可爱地地理解商寻求技术支持