136K的bin文件,差不多42秒

OTA升级
情形1:当升级FR801xH固件的时候,升级过程中设备断电,重新复位设备,设备可以启动升级前的程序吗?
情形2:当升级非FR801xH固件的时候,OTA升级时候能否自动识别,或者升级之后无法正常启动可以启动升级前的程序吗?
@zr 比如我在0x60000地址烧录Mac地址 ,不勾选Chip Erase选项,烧录工具只会从0x60000地址写6个字节?不会擦除0x60000开始Mac地址后面的数据吧
@zr 0x60000 一般都是OTA B分区的吧 Mac地址直接烧录到0x60000地址 下次升级的时候会被修改吧

FR801xH芯片通过烧录软件将Mac地址写入到flash之后,发现写错了,可以重新再次擦除将新的Mac地址写入到flash中吗?
请问一下,我现在的软件逻辑是长按按钮开机,调用system_sleep_disable退出低功耗模式,长按按钮关机,调用system_sleep_enable进入低功耗模式。这样频繁的进入和退出低功耗模式,会影响蓝牙广播和连接吗?
代码如下:
__attribute__((section("ram_code"))) void pmu_gpio_isr_ram(void)
{
uint32_t gpio_value = ool_read32(PMU_REG_GPIOA_V);
// PB5
if (gpio_value & GPIO_PB5)
{
co_printf("%s gpio_value: %x\r\n", __func__, gpio_value);
}
else
{
button_toggle_detected(gpio_value);
}
// co_printf(" %s gpio_value: %x\r\n", __func__, gpio_value);
ool_write32(PMU_REG_PORTA_LAST, gpio_value);
}
void user_key_init(void)
{
// 设置上拉 PD7 按键
pmu_set_pin_pull(KEY_GPIO_PORT, (1 << KEY_GPIO_BIT), true);
// PB5 外部中断引脚
pmu_set_pin_pull(GPIO_PORT_B, (1 << GPIO_BIT_5), true);
// PD7 PB5
pmu_port_wakeup_func_set(KEY_GPIO | GPIO_PB5);
button_init(KEY_GPIO);
}
问题如下:现在有PB5和PD7都设置中断唤醒,在中断处理函数pmu_gpio_isr_ram中如何区分是PD7引脚的中断,还是PB5的中断呢?
中断处理函数 PD7和PB5
__attribute__((section("ram_code"))) void pmu_gpio_isr_ram(void)
{
uint32_t gpio_value = ool_read32(PMU_REG_GPIOA_V);
button_toggle_detected(gpio_value);
co_printf(" %s gpio_value: %x\r\n", __func__, gpio_value);
ool_write32(PMU_REG_PORTA_LAST, gpio_value);
}
按下Key(PD7),运行结果如下:
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 4000a03c
pmu_gpio_isr_ram gpio_value: c000a03c
pmu_gpio_isr_ram gpio_value: 4000a03c
pmu_gpio_isr_ram gpio_value: c000a03c
pmu_gpio_isr_ram gpio_value: 5000a03c
pmu_gpio_isr_ram gpio_value: c000a03c
pmu_gpio_isr_ram gpio_value: 4000a03c
pmu_gpio_isr_ram gpio_value: c000a03c
pmu_gpio_isr_ram gpio_value: 4000a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 4000a03c
pmu_gpio_isr_ram gpio_value: c000a03c
请问一下,为啥同一个按键按下和抬起输出的值不一样?
/*********************************************************************
* @fn flash_protect_enable
*
* @brief protect flash chip from erase and write.
*
* @param wr_mode - 0: write.enable with command 0x50
* 1: write enable with command 0x06
*
* @return None.
*/
__attribute__((section("ram_code"))) void flash_protect_enable(uint8_t wr_mode);
/*********************************************************************
* @fn flash_protect_enable1
*
* @brief protect flash chip from erase and write.
*
* @param wr_mode - 0: write.enable with command 0x50
* 1: write enable with command 0x06
* mask protect bits mask, refer to flash spec
*
* @return None.
*/
__attribute__((section("ram_code"))) void flash_protect_enable1(uint8_t wr_mode,uint8_t mask);
/*********************************************************************
* @fn flash_protect_disable
*
* @brief remove protection flash chip from erase and write.
*
* @param wr_mode - 0: write.enable with command 0x50
* 1: write enable with command 0x06
*
* @return None.
*/
__attribute__((section("ram_code"))) void flash_protect_disable(uint8_t wr_mode);
flash_protect_enable和flash_protect_enable1有什么区别吗?
__attribute__((section("ram_code"))) void pmu_gpio_isr_ram(void)
{
uint32_t gpio_value = ool_read32(PMU_REG_GPIOA_V);
co_printf("gpio_value: %X\r\n", gpio_value);
ool_write32(PMU_REG_PORTA_LAST, gpio_value);
}
这个PMU中GPIO中断处理函数,可以区分哪一个GPIO吗? 比如我设置PA0,PA1都可以唤醒深度睡眠,如何区分是哪一个IO口触发的中断?
设置按键唤醒,可以设置为下降沿产生中断吗?
pmu_set_pin_pull(GPIO_PORT_C, (1 << GPIO_BIT_5), true);
pmu_port_wakeup_func_set(GPIO_PC5);
上述代码是按键按下和抬起都会产生中断。
/*********************************************************************
* @fn user_custom_parameters
*
* @brief initialize several parameters, this function will be called
* at the beginning of the program.
*
* @param None.
*
*
* @return None.
*/
void user_custom_parameters(void)
{
struct chip_unique_id_t id_data;
efuse_get_chip_unique_id(&id_data);
__jump_table.addr.addr[0] = 0x55;
__jump_table.addr.addr[1] = 0xEE;
__jump_table.addr.addr[2] = 0x88;
__jump_table.addr.addr[3] = 0x17;
__jump_table.addr.addr[4] = 0x9C;
__jump_table.addr.addr[5] = 0x00;
id_data.unique_id[5] |= 0xc0; // random addr->static addr type:the top two bit must be 1.
// memcpy(__jump_table.addr.addr,id_data.unique_id,6);
__jump_table.system_clk = SYSTEM_SYS_CLK_48M;
jump_table_set_static_keys_store_offset(JUMP_TABLE_STATIC_KEY_OFFSET);
retry_handshake();
}
你好,我在上述代码片段中修改了Mac地址,但是通过gap_address_get获取之后,还是原来的mac。请问下修改mac地址的方法是怎样的呢?
co_delay_10us默认最小单位是10us,请问一下原厂有提供co_delay_us微秒级别的延时吗?如果没有,软件模拟的也可以,是否可以提供参考?