8个职位/ 0个新
最后发表
liufeng-blue
离线
最后看到:7个月2周前
加入:2018-07-02 06:44
Da14580在扩展睡眠模式下不工作

这边需要闪存储当前的设备名称,设备mac地址以及设备密钥,以便做修改,发现flash无法对变量进行存储,应该是我的使用方式不对,能告诉我如何在延长睡眠模式下使用flash吗,另外我发现,在存储绑定信息当中,当闪光无法工作的时候,我调用bond_db_store_ext()后,设备自动断开连接,应该是flash没有正常工作造成的吧,我把这句频闭后就能正常连接了。
flash初始化代码如下:
空白spi_flash_peripheral_init(空白)

spi_FLASH_CS_Pad。pin = SPI_CS_PIN;
spi_FLASH_CS_Pad。port = SPI_GPIO_PORT;
//启用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)
/ / {
//设备未被识别。
//使用默认参数(SPI_FLASH_SIZE, SPI_FLASH_PAGE)
//或者,可以在这里断言错误。
spi_flash_init (SPI_FLASH_DEFAULT_SIZE SPI_FLASH_DEFAULT_PAGE);
/ /}

spi_flash_release_from_power_down ();

spi_cs_low ();

spi_cs_high ();

希望能尽快得到解决。
非常感谢。

设备:
CYibin
离线
最后看到:4个月2周前
工作人员
加入:2017-12-14 02:48
你好,

你好,

你的描述中包含太多情况的说明,我们先把这些情况缕清一下?

1、你的硬件环境是官方的开发板吗?如果不是,flash型号是什么?

2、你的软件,能在官方开发板上正常运行吗?

3、不使能睡眠模式(延长睡眠),当前闪可以读,写数据吗?

4、使能睡眠模式(延长睡眠)之后,flash是否还可以读写?

5、调用bond_db_store_ext()之后,设备自动断开连接,是设备死机了吗?蓝牙是否还有广播?

liufeng-blue
离线
最后看到:7个月2周前
加入:2018-07-02 06:44
你好,CYibin

你好,CYibin
1、我使用的是自定义板子,flash信号为w25x10。

2、我使用官方的SDK5.0.4中的spi_flash例程是能够对flash进行操作的。

3,我尝试不在睡眠模式下使用flash,发现也没有成功,应该是需求方例程的原因,我使用演示板单独将flash添加在需求方例程,将代码下在flash,初始化后清除所有flash数据,发现flash数据还在,应该是我没有正确的对闪进行操作。

可以告诉我是否在需求方下闪光被关闭了,如果是,能告诉我如何正确的在需求方例程下对闪进行操作吗。

system_init ();

spi_flash_peripheral_init ();

spi_cs_low ();

spi_cs_high ();

//删除flash
spi_flash_chip_erase ()

空白spi_flash_peripheral_init ()

spi_FLASH_CS_Pad。pin = SPI_CS_PIN;
spi_FLASH_CS_Pad。port = SPI_GPIO_PORT;
//启用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)
/ / {
//设备未被识别。
//使用默认参数(SPI_FLASH_SIZE, SPI_FLASH_PAGE)
//或者,可以在这里断言错误。
spi_flash_init (SPI_FLASH_SIZE SPI_FLASH_PAGE);
/ /}

int8_t spi_flash_chip_erase(空白)

uint8_t状态;

if (spi_flash_set_write_enable() != ERR_OK) //发送[写入启用]指令
返回ERR_TIMEOUT;

spi_set_bitmode (SPI_MODE_8BIT);
spi_transaction (CHIP_ERASE);//芯片擦除命令
Status = spi_flash_wait_till_ready();

返回状态;

希望能尽快得到解决。
非常感谢。

CYibin
离线
最后看到:4个月2周前
工作人员
加入:2017-12-14 02:48
你好,

你好,

是否有引出jtag接口,通过单步调试,看flash操作卡在了哪一步?

liufeng-blue
离线
最后看到:7个月2周前
加入:2018-07-02 06:44
我使用官方的板子进行调试

我使用官方的板子进行调试,发现一样在DSPS例程下无法使flash工作。
1,通过单步调试,我发现官方的spi_flash例程中,spi_flash_chip_erase()这句函数执行时间相较于需求方例程短很多。
2,在需求方例程中,进入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例程中添加了如下代码:

初始化flash IO口
Void set_pad_functions(Void) //设置gpio端口函数模式

/*
*配置应用端口。
即。
GPIO_ConfigurePin(GPIO_PORT_0, GPIO_PIN_1, OUTPUT, PID_GPIO, false);//设置P_01为Generic purpose Output
* /
gpio_configupin (GPIO_UART1_TX_PORT, GPIO_UART1_TX_PIN, OUTPUT, PID_UART1_TX, false);
gpio_configupin (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);

#如果(UART_HW_FLOW_ENABLED)
gpio_configupin (GPIO_UART1_RTS_PORT, GPIO_UART1_RTS_PIN, OUTPUT, PID_UART1_RTSN, false);
gpio_configupin (GPIO_UART1_CTS_PORT, GPIO_UART1_CTS_PIN, INPUT_PULLUP, PID_UART1_CTSN, false);
# endif / / UART_HW_FLOW_ENABLED

# ifdef CFG_PRINTF_UART2
gpio_configupin (GPIO_UART2_TX_PORT, GPIO_UART2_TX_PIN, OUTPUT, PID_UART2_TX, false);
gpio_configupin (GPIO_UART2_RX_PORT, GPIO_UART2_RX_PIN, INPUT, PID_UART2_RX, false);
# endif


主函数
int main_func(空白)

sleep_mode_t sleep_mode;

/ /全局初始化
system_init ();

spi_flash_peripheral_init ();

spi_cs_low ();

spi_cs_high ();

//删除flash
spi_flash_chip_erase ();

/*
************************************************************************************
*平台初始化
************************************************************************************
* /
而(1)

{做
//调度所有未决事件
schedule_while_ble_on ();

而((app_asynch_proc ()));//将控制权授予应用程序,尝试关闭电源
如果应用程序返回GOTO_SLEEP . //
/ / ((STREAMDATA_QUEUE) & & stream_queue_more_data ()));//给streamer控制权,试着去关机
如果应用程序返回GOTO_SLEEP . //
//如果允许,则等待中断并进入睡眠状态
如果(((! BLE_APP_PRESENT) & & (check_gtl_state ())) | |
(BLE_APP_PRESENT))

//禁用中断
GLOBAL_INT_STOP ();

app_asynch_sleep_proc ();

//获取允许的睡眠模式
//从rwip_power_down()到WFI()的时间必须尽可能短!!
Sleep_mode = rwip_power_down();

If ((sleep_mode == mode_ext_sleep) || (sleep_mode == mode_deep_sleep)) {
//关掉收音机和任何允许的
arch_goto_sleep (sleep_mode);

//等待中断来恢复操作
注射用水();

/ /恢复操作
arch_resume_from_sleep ();

Else if (sleep_mode == mode_idle)

if (((!BLE_APP_PRESENT) && check_gtl_state()) || . if (((
(BLE_APP_PRESENT))
//等待中断来恢复操作
注射用水();

//恢复中断
GLOBAL_INT_START ();

如果(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

CYibin
离线
最后看到:4个月2周前
工作人员
加入:2017-12-14 02:48
你好,

你好,

关闭睡眠的方式不对,应该是const static sleep state_t app_default_sleep_mode = ARCH_SLEEP_OFF;

请尝试后回复结果

liufeng-blue
离线
最后看到:7个月2周前
加入:2018-07-02 06:44
关闭了尝试也不行

关闭了尝试也不行,可以给我一个flash在需求方例程下成功使用的案例嘛,闪光型号为W25X10。

CYibin
离线
最后看到:4个月2周前
工作人员
加入:2017-12-14 02:48
不好意思,目前官方没有你所提的例程可供释放。若问题还没解决

不好意思,目前官方没有你所提的例程可供释放。若问题还没解决,你可向当地代理商寻求技术支持