diff --git a/docs/development_guide/build/doctrees/api_reference/peripheral/api_flash.doctree b/docs/development_guide/build/doctrees/api_reference/peripheral/api_flash.doctree new file mode 100644 index 00000000..8f354b0b Binary files /dev/null and b/docs/development_guide/build/doctrees/api_reference/peripheral/api_flash.doctree differ diff --git a/docs/development_guide/build/doctrees/api_reference/peripheral/api_pm.doctree b/docs/development_guide/build/doctrees/api_reference/peripheral/api_pm.doctree new file mode 100644 index 00000000..719827b2 Binary files /dev/null and b/docs/development_guide/build/doctrees/api_reference/peripheral/api_pm.doctree differ diff --git a/docs/development_guide/build/doctrees/api_reference/peripheral/index.doctree b/docs/development_guide/build/doctrees/api_reference/peripheral/index.doctree index 740c68b1..5c7a4248 100644 Binary files a/docs/development_guide/build/doctrees/api_reference/peripheral/index.doctree and b/docs/development_guide/build/doctrees/api_reference/peripheral/index.doctree differ diff --git a/docs/development_guide/build/doctrees/api_reference/usb stack/api_usb_stack.doctree b/docs/development_guide/build/doctrees/api_reference/usb stack/api_usb_stack.doctree index 32a862be..f12f9888 100644 Binary files a/docs/development_guide/build/doctrees/api_reference/usb stack/api_usb_stack.doctree and b/docs/development_guide/build/doctrees/api_reference/usb stack/api_usb_stack.doctree differ diff --git a/docs/development_guide/build/doctrees/environment.pickle b/docs/development_guide/build/doctrees/environment.pickle index 7d272ff9..a93eb81a 100644 Binary files a/docs/development_guide/build/doctrees/environment.pickle and b/docs/development_guide/build/doctrees/environment.pickle differ diff --git a/docs/development_guide/build/doctrees/get_started/board.doctree b/docs/development_guide/build/doctrees/get_started/board.doctree index 5d913315..e8f4de81 100644 Binary files a/docs/development_guide/build/doctrees/get_started/board.doctree and b/docs/development_guide/build/doctrees/get_started/board.doctree differ diff --git a/docs/development_guide/build/doctrees/index.doctree b/docs/development_guide/build/doctrees/index.doctree index eabc8904..a0576018 100644 Binary files a/docs/development_guide/build/doctrees/index.doctree and b/docs/development_guide/build/doctrees/index.doctree differ diff --git a/docs/development_guide/build/doctrees/samples/advance samples/ble_scan_demo.doctree b/docs/development_guide/build/doctrees/samples/advance samples/ble_scan_demo.doctree index dfa8f9b3..6494079a 100644 Binary files a/docs/development_guide/build/doctrees/samples/advance samples/ble_scan_demo.doctree and b/docs/development_guide/build/doctrees/samples/advance samples/ble_scan_demo.doctree differ diff --git a/docs/development_guide/build/doctrees/samples/advance samples/boot2_iap_info.doctree b/docs/development_guide/build/doctrees/samples/advance samples/boot2_iap_info.doctree index 85787372..0dad03b2 100644 Binary files a/docs/development_guide/build/doctrees/samples/advance samples/boot2_iap_info.doctree and b/docs/development_guide/build/doctrees/samples/advance samples/boot2_iap_info.doctree differ diff --git a/docs/development_guide/build/doctrees/samples/advance samples/fatfs_demo.doctree b/docs/development_guide/build/doctrees/samples/advance samples/fatfs_demo.doctree index 8fb1c2ad..474e8c9c 100644 Binary files a/docs/development_guide/build/doctrees/samples/advance samples/fatfs_demo.doctree and b/docs/development_guide/build/doctrees/samples/advance samples/fatfs_demo.doctree differ diff --git a/docs/development_guide/build/doctrees/samples/advance samples/lowpower_demo.doctree b/docs/development_guide/build/doctrees/samples/advance samples/lowpower_demo.doctree index 80eb7f1e..0941ef72 100644 Binary files a/docs/development_guide/build/doctrees/samples/advance samples/lowpower_demo.doctree and b/docs/development_guide/build/doctrees/samples/advance samples/lowpower_demo.doctree differ diff --git a/docs/development_guide/build/doctrees/samples/advance samples/shell_demo.doctree b/docs/development_guide/build/doctrees/samples/advance samples/shell_demo.doctree index 74ae1e24..9b56080e 100644 Binary files a/docs/development_guide/build/doctrees/samples/advance samples/shell_demo.doctree and b/docs/development_guide/build/doctrees/samples/advance samples/shell_demo.doctree differ diff --git a/docs/development_guide/build/doctrees/samples/advance samples/usb/index.doctree b/docs/development_guide/build/doctrees/samples/advance samples/usb/index.doctree index 301ebdb4..38a80442 100644 Binary files a/docs/development_guide/build/doctrees/samples/advance samples/usb/index.doctree and b/docs/development_guide/build/doctrees/samples/advance samples/usb/index.doctree differ diff --git a/docs/development_guide/build/doctrees/samples/advance samples/usb/usbd_msc.doctree b/docs/development_guide/build/doctrees/samples/advance samples/usb/usbd_msc.doctree index 7af86a33..c1cfc6d4 100644 Binary files a/docs/development_guide/build/doctrees/samples/advance samples/usb/usbd_msc.doctree and b/docs/development_guide/build/doctrees/samples/advance samples/usb/usbd_msc.doctree differ diff --git a/docs/development_guide/build/doctrees/samples/advance samples/usb/usbd_video.doctree b/docs/development_guide/build/doctrees/samples/advance samples/usb/usbd_video.doctree index fe648b6a..efbf1093 100644 Binary files a/docs/development_guide/build/doctrees/samples/advance samples/usb/usbd_video.doctree and b/docs/development_guide/build/doctrees/samples/advance samples/usb/usbd_video.doctree differ diff --git a/docs/development_guide/build/doctrees/samples/basic samples/flash/flash_demo.doctree b/docs/development_guide/build/doctrees/samples/basic samples/flash/flash_demo.doctree new file mode 100644 index 00000000..568cfa2d Binary files /dev/null and b/docs/development_guide/build/doctrees/samples/basic samples/flash/flash_demo.doctree differ diff --git a/docs/development_guide/build/doctrees/samples/basic samples/flash/index.doctree b/docs/development_guide/build/doctrees/samples/basic samples/flash/index.doctree new file mode 100644 index 00000000..1c2ee4f7 Binary files /dev/null and b/docs/development_guide/build/doctrees/samples/basic samples/flash/index.doctree differ diff --git a/docs/development_guide/build/html/_images/flash.png b/docs/development_guide/build/html/_images/flash.png new file mode 100644 index 00000000..d8386c06 Binary files /dev/null and b/docs/development_guide/build/html/_images/flash.png differ diff --git a/docs/development_guide/build/html/_images/lowpower_hbn.gif b/docs/development_guide/build/html/_images/lowpower_hbn.gif new file mode 100644 index 00000000..642ed8c7 Binary files /dev/null and b/docs/development_guide/build/html/_images/lowpower_hbn.gif differ diff --git a/docs/development_guide/build/html/_images/lowpower_pds.gif b/docs/development_guide/build/html/_images/lowpower_pds.gif new file mode 100644 index 00000000..64102483 Binary files /dev/null and b/docs/development_guide/build/html/_images/lowpower_pds.gif differ diff --git a/docs/development_guide/build/html/_images/usb_msc.png b/docs/development_guide/build/html/_images/usb_msc.png new file mode 100644 index 00000000..3f61122f Binary files /dev/null and b/docs/development_guide/build/html/_images/usb_msc.png differ diff --git a/docs/development_guide/build/html/_images/usb_msc2.png b/docs/development_guide/build/html/_images/usb_msc2.png new file mode 100644 index 00000000..cebf6383 Binary files /dev/null and b/docs/development_guide/build/html/_images/usb_msc2.png differ diff --git a/docs/development_guide/build/html/_images/usb_msc3.gif b/docs/development_guide/build/html/_images/usb_msc3.gif new file mode 100644 index 00000000..919f18b8 Binary files /dev/null and b/docs/development_guide/build/html/_images/usb_msc3.gif differ diff --git a/docs/development_guide/build/html/_sources/api_reference/peripheral/api_flash.rst.txt b/docs/development_guide/build/html/_sources/api_reference/peripheral/api_flash.rst.txt new file mode 100644 index 00000000..18e8f1b1 --- /dev/null +++ b/docs/development_guide/build/html/_sources/api_reference/peripheral/api_flash.rst.txt @@ -0,0 +1,89 @@ +XIP FLASH 设备 +========================= + +简介 +------------------------ + +XIP:eXecute In Place,即芯片内执行,指应用程序可以直接在 flash 闪存内运行,不必再把代码读到系统 RAM 中。所谓片内执行并不是说程序在存储器内执行,CPU的基本功能是取指、译码、执行,存储器访问,写回。通常我们使用 Nor Flash,Nor Flash能在芯片内执行,指的是 CPU 能够直接从Nor flash 中取指令,供后面的译码器和执行器来使用。 + +博流系列芯片拥有 XIP FLASH 控制器,并且支持内存映射,BL702/BL704/BL706 的逻辑地址为 0x23000000,最大可支持 8M 的 nor flash。不仅如此,映射的实际物理 flash 地址是可以修改的,举例来说,假设一个 nor flash 大小为 1M,如果应用程序烧录在 flash 物理地址 0,那么就可以将逻辑地址映射到 0 地址,如果应用程序烧录在 flash 物理地址 x,那么就可以将逻辑地址映射到 x 地址,而逻辑地址可以保持不变,一直是 0x23000000,省去了修改 ld 文件的麻烦。 + +下图演示三块应用程序映射地址分布: + +.. figure:: ../img/flash.png + :alt: + +XIP FLASH 设备接口 +------------------------ + +**flash_init** +^^^^^^^^^^^^^^^^^^^^^^^^ + +``flash_init`` 用于初始化 flash 控制器。 + +.. code-block:: C + + BL_Err_Type flash_init(void); + +- **return** 错误码,0 表示成功,其他表示错误 + +**flash_read_jedec_id** +^^^^^^^^^^^^^^^^^^^^^^^^ + +``flash_read_jedec_id`` 用于获取 flash id。 + +.. code-block:: C + + BL_Err_Type flash_read_jedec_id(uint8_t *data); + +- **data** 存储 flash id 的指针,大小 4 字节 +- **return** 错误码,0 表示成功,其他表示错误 + +**flash_erase** +^^^^^^^^^^^^^^^^^^^^^^^^ + +``flash_init`` 用于 flash 扇区擦除。 + +.. code-block:: C + + BL_Err_Type flash_erase(uint32_t startaddr, uint32_t len); + +- **startaddr** 要擦除的 flash 物理起始地址 +- **len** 擦除扇区长度,单位 +- **return** 错误码,0 表示成功,其他表示错误 + +**flash_write** +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: C + + BL_Err_Type flash_write(uint32_t addr, uint8_t *data, uint32_t len); + +- **addr** 要写入的 flash 物理起始地址 +- **data** 写入数据指针 +- **len** 写入长度 +- **return** 错误码,0 表示成功,其他表示错误 + +**flash_read** +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: C + + BL_Err_Type flash_read(uint32_t addr, uint8_t *data, uint32_t len); + +- **addr** 要读取的 flash 物理起始地址 +- **data** 读入数据指针 +- **len** 读取长度 +- **return** 错误码,0 表示成功,其他表示错误 + +**hal_jump2app** +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: C + + void hal_jump2app(uint32_t flash_offset); + +- **flash_offset** 要跳转的 flash 物理地址,即烧录新应用程序的物理地址 + + +.. error:: 以上地址均为 flash 物理地址,不可以填入内存映射地址,比如0x23000000。 \ No newline at end of file diff --git a/docs/development_guide/build/html/_sources/api_reference/peripheral/api_pm.rst.txt b/docs/development_guide/build/html/_sources/api_reference/peripheral/api_pm.rst.txt new file mode 100644 index 00000000..3783f157 --- /dev/null +++ b/docs/development_guide/build/html/_sources/api_reference/peripheral/api_pm.rst.txt @@ -0,0 +1,105 @@ +PM 设备 +========================= + +简介 +------------------------ + +PM 设备接口 +------------------------ + +**pm_pds_mode_enter** +^^^^^^^^^^^^^^^^^^^^^^^^ + +``pm_pds_mode_enter`` 用来进入 pds 模式 + +.. code-block:: C + + void pm_pds_mode_enter(enum pm_pds_sleep_level pds_level, uint32_t sleep_time); + +- **pds_level** PDS 等级 +- **sleep_time** 睡眠时间,单位 1/32768 hz + +其中 ``pds_level`` 提供以下类型: + +.. code-block:: C + + enum pm_pds_sleep_level { + PM_PDS_LEVEL_0, + PM_PDS_LEVEL_1, + PM_PDS_LEVEL_2, + PM_PDS_LEVEL_3, + PM_PDS_LEVEL_4, /*do not recommend to use*/ + PM_PDS_LEVEL_5, /*do not recommend to use*/ + PM_PDS_LEVEL_6, /*do not recommend to use*/ + PM_PDS_LEVEL_7, /*do not recommend to use*/ + PM_PDS_LEVEL_31 = 31, + }; + +.. warning:: pds level 4~7 不推荐使用 + +**pm_hbn_mode_enter** +^^^^^^^^^^^^^^^^^^^^^^^^ + +``pm_hbn_mode_enter`` 用来进入 hbn 模式 + +.. code-block:: C + + void pm_hbn_mode_enter(enum pm_hbn_sleep_level hbn_level, uint8_t sleep_time); + +- **hbn_level** HBN 等级 +- **sleep_time** 睡眠时间,单位秒 + + +其中 ``hbn_level`` 提供以下类型: + +.. code-block:: C + + enum pm_hbn_sleep_level { + PM_HBN_LEVEL_0, + PM_HBN_LEVEL_1, + PM_HBN_LEVEL_2, + }; + +**pm_set_wakeup_callback** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +``pm_set_wakeup_callback`` 用来设置从唤醒恢复时跳转的函数地址,hbn level1 以上不可用。 + +.. code-block:: C + + void pm_set_wakeup_callback(void (*wakeup_callback)(void)); + +- **wakeup_callback** 跳转的函数地址 + + +**pm_hbn_out0_irq_register** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +``pm_hbn_out0_irq_register`` 用来注册 hbn out0 中断,out0下中断有:GPIO9~GPIO12,RTC。中断回调函数为 ``pm_irq_callback``。 + +.. code-block:: C + + void pm_hbn_out0_irq_register(void); + +**pm_hbn_out1_irq_register** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +``pm_hbn_out1_irq_register`` 用来注册 hbn out1 中断,out1下中断有:ACOMP0、ACOMP1、BOR、PIR。中断回调函数为 ``pm_irq_callback``。 + +.. code-block:: C + + void pm_hbn_out1_irq_register(void); + +``pm_irq_callback`` 中 ``event`` 提供以下类型: + +.. code-block:: C + + enum pm_event_type { + PM_HBN_GPIO9_WAKEUP_EVENT, + PM_HBN_GPIO10_WAKEUP_EVENT, + PM_HBN_GPIO11_WAKEUP_EVENT, + PM_HBN_GPIO12_WAKEUP_EVENT, + PM_HBN_RTC_WAKEUP_EVENT, + PM_HBN_ACOMP0_WAKEUP_EVENT, + PM_HBN_ACOMP1_WAKEUP_EVENT, + }; \ No newline at end of file diff --git a/docs/development_guide/build/html/_sources/api_reference/peripheral/index.rst.txt b/docs/development_guide/build/html/_sources/api_reference/peripheral/index.rst.txt index 0d135fb1..e4a14931 100644 --- a/docs/development_guide/build/html/_sources/api_reference/peripheral/index.rst.txt +++ b/docs/development_guide/build/html/_sources/api_reference/peripheral/index.rst.txt @@ -17,4 +17,6 @@ Peripheral DAC 设备 TIMER 设备 QDEC 设备 - USB 设备 \ No newline at end of file + USB 设备 + XIP FLASH 设备 + PM 设备 \ No newline at end of file diff --git a/docs/development_guide/build/html/_sources/api_reference/usb stack/api_usb_stack.rst.txt b/docs/development_guide/build/html/_sources/api_reference/usb stack/api_usb_stack.rst.txt index 03668df2..931b70cf 100644 --- a/docs/development_guide/build/html/_sources/api_reference/usb stack/api_usb_stack.rst.txt +++ b/docs/development_guide/build/html/_sources/api_reference/usb stack/api_usb_stack.rst.txt @@ -190,6 +190,44 @@ USB Device CDC 类接口 - **class** 类的句柄 - **intf** 接口句柄 +**usbd_cdc_acm_set_line_coding** +"""""""""""""""""""""""""""""""""""" + +``usbd_cdc_acm_set_line_coding`` 用来对串口进行配置。该接口由用户实现,默认为空。 + +.. code-block:: C + + void usbd_cdc_acm_set_line_coding(uint32_t baudrate, uint8_t databits, uint8_t parity, uint8_t stopbits); + +- **baudrate** 波特率 +- **databits** 数据位 +- **parity** 校验位 +- **stopbits** 停止位 + + +**usbd_cdc_acm_set_dtr** +"""""""""""""""""""""""""""""""""""" + +``usbd_cdc_acm_set_line_coding`` 用来控制串口 DTR。该接口由用户实现,默认为空。 + +.. code-block:: C + + void usbd_cdc_acm_set_dtr(bool dtr); + +- **dtr** dtr 为1表示拉低电平,为0表示拉高电平 + + +**usbd_cdc_acm_set_rts** +"""""""""""""""""""""""""""""""""""" + +``usbd_cdc_acm_set_line_coding`` 用来控制串口 RTS。该接口由用户实现,默认为空。 + +.. code-block:: C + + void usbd_cdc_acm_set_rts(bool rts); + +- **rts** rts 为1表示拉低电平,为0表示拉高电平 + USB Device MSC 类接口 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -204,6 +242,46 @@ USB Device MSC 类接口 - **out_ep** 输出端点的地址 - **in_ep** 输入端点的地址 +**usbd_msc_get_cap** +"""""""""""""""""""""""""""""""""""" + +``usbd_msc_get_cap`` 用来获取存储器的信息。该接口由用户实现,默认为空。 + +.. code-block:: C + + void usbd_msc_get_cap(uint8_t lun, uint32_t *block_num, uint16_t *block_size); + +- **lun** 存储逻辑单元,暂时无用 +- **block_num** 存储扇区个数的指针 +- **block_size** 存储扇区大小的指针 + +**usbd_msc_sector_read** +"""""""""""""""""""""""""""""""""""" + +``usbd_msc_sector_read`` 用来对存储器某个扇区开始进行数据读取。该接口由用户实现,默认为空。 + +.. code-block:: C + + int usbd_msc_sector_read(uint32_t sector, uint8_t *buffer, uint32_t length); + +- **sector** 扇区偏移 +- **buffer** 存储读取的数据的指针 +- **length** 读取长度 + + +**usbd_msc_sector_write** +"""""""""""""""""""""""""""""""""""" + +``usbd_msc_sector_write`` 用来对存储器某个扇区开始写入数据。该接口由用户实现,默认为空。 + +.. code-block:: C + + int usbd_msc_sector_write(uint32_t sector, uint8_t *buffer, uint32_t length); + +- **sector** 扇区偏移 +- **buffer** 写入数据指针 +- **length** 写入长度 + USB Device HID 类接口 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -221,6 +299,42 @@ USB Device HID 类接口 - **class** 类的句柄 - **intf** 接口句柄 +**usbd_hid_report_descriptor_register** +"""""""""""""""""""""""""""""""""""""""""""" + +``usbd_hid_report_descriptor_register`` 用来对存储器某个扇区开始写入数据。该接口由用户实现,默认为空。 + +.. code-block:: C + + void usbd_hid_report_descriptor_register(uint8_t intf_num, const uint8_t *desc, uint32_t desc_len); + +- **intf_num** 当前 hid 报告描述符所在接口偏移 +- **desc** 报告描述符 +- **desc_len** 报告描述符长度 + +**usbd_hid_set_request_callback** +"""""""""""""""""""""""""""""""""""" + +``usbd_hid_set_request_callback`` 用来对存储器某个扇区开始写入数据。该接口由用户实现,默认为空。 + +.. code-block:: C + + void usbd_hid_set_request_callback( uint8_t intf_num, + uint8_t (*get_report_callback)(uint8_t report_id, uint8_t report_type), + void (*set_report_callback)(uint8_t report_id, uint8_t report_type, uint8_t *report, uint8_t report_len), + uint8_t (*get_idle_callback)(uint8_t report_id), + void (*set_idle_callback)(uint8_t report_id, uint8_t duration), + void (*set_protocol_callback)(uint8_t protocol), + uint8_t (*get_protocol_callback)(void)); + +- **intf_num** 当前 hid 报告描述符所在接口偏移 +- **get_report_callback** get report命令处理回调函数 +- **set_report_callback** set report命令处理回调函数 +- **get_idle_callback** get idle命令处理回调函数 +- **set_idle_callback** set idle命令处理回调函数 +- **set_protocol_callback** set protocol命令处理回调函数 +- **get_protocol_callback** get protocol命令处理回调函数 + USB Device AUDIO 类接口 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/development_guide/build/html/_sources/index.rst.txt b/docs/development_guide/build/html/_sources/index.rst.txt index 762e7c1b..882138ad 100644 --- a/docs/development_guide/build/html/_sources/index.rst.txt +++ b/docs/development_guide/build/html/_sources/index.rst.txt @@ -54,6 +54,7 @@ BL MCU SDK 将为您提供博流 BL70X 系列 MCU 开发的全方位支持。 samples/basic samples/i2s/index samples/basic samples/adc/index samples/basic samples/timer/index + samples/basic samples/flash/index .. toctree:: diff --git a/docs/development_guide/build/html/_sources/samples/advance samples/ble_scan_demo.rst.txt b/docs/development_guide/build/html/_sources/samples/advance samples/ble_scan_demo.rst.txt index 2f247122..6284ca14 100644 --- a/docs/development_guide/build/html/_sources/samples/advance samples/ble_scan_demo.rst.txt +++ b/docs/development_guide/build/html/_sources/samples/advance samples/ble_scan_demo.rst.txt @@ -147,13 +147,13 @@ BLE server 软件实现 :linenos: $ cd /bl_mcu_sdk - $ make BOARD=bl706_iot APP=ble_peripheral SUPPORT_FREERTOS=y SUPPORT_FLOAT=y SUPPORT_BLE=y + $ make BOARD=bl706_iot APP=ble_peripheral SUPPORT_FLOAT=y .. code-block:: bash :linenos: $ cd /bl_mcu_sdk - $ make BOARD=bl706_iot APP=ble_central SUPPORT_FREERTOS=y SUPPORT_FLOAT=y SUPPORT_BLE=y + $ make BOARD=bl706_iot APP=ble_central SUPPORT_FLOAT=y - **烧录** diff --git a/docs/development_guide/build/html/_sources/samples/advance samples/boot2_iap_info.rst.txt b/docs/development_guide/build/html/_sources/samples/advance samples/boot2_iap_info.rst.txt index 929138af..028ec191 100644 --- a/docs/development_guide/build/html/_sources/samples/advance samples/boot2_iap_info.rst.txt +++ b/docs/development_guide/build/html/_sources/samples/advance samples/boot2_iap_info.rst.txt @@ -12,13 +12,13 @@ Bouffalo Lab 为 IAP 功能应用提供了相应的 boot2_iap.bin 文件,并 用户可以配合 Dev Cube 图形界面烧写软件,将已有的 boot2_iap.bin 文件烧录进目标板,烧录 一次之后,就可以通过 IAP 功能,在线更新用户代码。 -bl_mcu_sdk 开源了 boot2_iap 的软件源码,用户可以到 examples/boot2_iap 查阅代码,并完成编译烧写。编译烧写过程可以参考《快速开发指南》介绍。 +bl_mcu_sdk 开源了 boot2_iap 的软件源码,用户可以到 ``examples/boot2_iap`` 查阅代码,并完成编译烧写。编译烧写过程可以参考《快速开发指南》介绍。 准备工具 ----------------------- - 最新版本的 Dev Cube -- Bl706 开发板 +- BL706 开发板 - TTL-USB 电平转换芯片 diff --git a/docs/development_guide/build/html/_sources/samples/advance samples/fatfs_demo.rst.txt b/docs/development_guide/build/html/_sources/samples/advance samples/fatfs_demo.rst.txt index 7f95bfbf..bdb7959a 100644 --- a/docs/development_guide/build/html/_sources/samples/advance samples/fatfs_demo.rst.txt +++ b/docs/development_guide/build/html/_sources/samples/advance samples/fatfs_demo.rst.txt @@ -1,2 +1,161 @@ -Fatfs 文件系统读写 -==================== +FatFs 文件系统读写(SD 卡) +=========================== + +本 demo 主要演示使用 spi 驱动 sd 卡并挂载 fatfs 文件系统的例子。其中 fatfs api 见 `Fatfs 官网 `_。 + +准备工具 +----------------------- + +- 一张 class10 的 sd 卡和 sd 卡转spi 转接板 + +硬件连接 +----------------------------- + +本 demo 基于 BL706_AVB 开发板,连接方式如下 + +:: + + GPIO function GPIO pin + ---------------------------------- + SD_CS <--> GPIO10 + SPI_SCK <--> GPIO19 + SPI_MISO <--> GPIO20 + SPI_MOSI <--> GPIO21 + + +软件实现 +----------------------------- + +- 软件代码见 ``examples/spi/spi_dma_sd`` + +.. code-block:: C + :linenos: + + #define BSP_SPI_CLOCK_SOURCE ROOT_CLOCK_SOURCE_BCLK + #define BSP_SPI_CLOCK_DIV 0 + +- 配置 ``SPI`` 设备时钟源,见 ``bsp/board/bl706_avb/clock_config.h`` + +.. code-block:: C + :linenos: + + #define CONFIG_GPIO19_FUNC GPIO_FUN_SPI + #define CONFIG_GPIO20_FUNC GPIO_FUN_SPI + #define CONFIG_GPIO21_FUNC GPIO_FUN_SPI + +- 配置 ``SPI`` 设备复用引脚,见 ``bsp/board/bl706_avb/pinmux_config.h``,,如有改动,请自行修改 + +.. note:: 为适配 bl702_avb 硬件, SPI 的 MOSI 和 MISO 默认进行了调换,如果想要恢复默认,修改 ``drivers/bl702_driver/hal_drv/default_config/spi_config.h`` 中 ``SPI_SWAP_ENABLE`` 为 0 + +.. code-block:: C + :linenos: + + #define BSP_USING_SPI0 + + #if defined(BSP_USING_SPI0) + #ifndef SPI0_CONFIG + #define SPI0_CONFIG \ + { \ + .id = 0, \ + .clk = 18000000,\ + .mode = SPI_MASTER_MODE, \ + .direction = SPI_MSB_BYTE0_DIRECTION_FIRST, \ + .clk_polaraity = SPI_POLARITY_LOW, \ + .clk_phase = SPI_PHASE_1EDGE, \ + .datasize = SPI_DATASIZE_8BIT, \ + .fifo_threshold = 4, \ + } + #endif + #endif + +- 使能 ``BSP_USING_SPI0`` 并配置 ``SPI`` 设备配置,见 ``bsp/board/bl706_avb/peripheral_config.h`` + +.. note:: sd卡的频率不能过高,所以设置成 18M 比较合适 + +.. code-block:: C + :linenos: + + #define BSP_USING_DMA0_CH3 + #define BSP_USING_DMA0_CH4 + + #if defined(BSP_USING_DMA0_CH3) + #ifndef DMA0_CH3_CONFIG + #define DMA0_CH3_CONFIG \ + { \ + .id = 0, \ + .ch = 3, \ + .direction = DMA_MEMORY_TO_PERIPH, \ + .transfer_mode = DMA_LLI_ONCE_MODE, \ + .src_req = DMA_REQUEST_NONE, \ + .dst_req = DMA_REQUEST_SPI0_TX, \ + .src_width = DMA_TRANSFER_WIDTH_8BIT, \ + .dst_width = DMA_TRANSFER_WIDTH_8BIT, \ + } + #endif + #endif + + #if defined(BSP_USING_DMA0_CH4) + #ifndef DMA0_CH4_CONFIG + #define DMA0_CH4_CONFIG \ + { \ + .id = 0, \ + .ch = 4, \ + .direction = DMA_PERIPH_TO_MEMORY, \ + .transfer_mode = DMA_LLI_ONCE_MODE, \ + .src_req = DMA_REQUEST_SPI0_RX, \ + .dst_req = DMA_REQUEST_NONE, \ + .src_width = DMA_TRANSFER_WIDTH_8BIT, \ + .dst_width = DMA_TRANSFER_WIDTH_8BIT, \ + } + #endif + #endif + +- 使能 ``BSP_USING_DMA0_CH3``, ``BSP_USING_DMA0_CH4`` 并配置 ``DMA`` 设备配置,见 ``bsp/board/bl706_avb/peripheral_config.h`` + +.. code-block:: C + :linenos: + + void fatfs_sd_driver_register(void) + { + FATFS_DiskioDriverTypeDef sdDiskioDriver; + + memset(&sdDiskioDriver, 0, sizeof(FATFS_DiskioDriverTypeDef)); + + sdDiskioDriver.MMC_disk_status = sd_disk_status; + sdDiskioDriver.MMC_disk_initialize = sd_disk_initialize; + sdDiskioDriver.MMC_disk_write = sd_disk_write; + sdDiskioDriver.MMC_disk_read = sd_disk_read; + sdDiskioDriver.MMC_disk_ioctl = sd_disk_ioctl; + sdDiskioDriver.Translate_Result_Code = Translate_Result_Code; + disk_driver_callback_init(&sdDiskioDriver); + } + +- 实现 fatfs 需要的底层接口 + +剩余代码见 main.c。 + +编译和烧录 +----------------------------- + +- **CDK 编译** + + 打开项目中提供的工程文件:spi_dma_sd.cdkproj + + 参照 :ref:`windows_cdk_quick_start` 的步骤编译下载即可 + +- **命令行编译** + +.. code-block:: bash + :linenos: + + $ cd /bl_mcu_sdk + $ make BOARD=bl706_avb APP=spi_dma_sd + +- **烧录** + + 详见 :ref:`bl_dev_cube` + + +实验现象 +----------------------------- + diff --git a/docs/development_guide/build/html/_sources/samples/advance samples/lowpower_demo.rst.txt b/docs/development_guide/build/html/_sources/samples/advance samples/lowpower_demo.rst.txt index 5db21645..35e279dd 100644 --- a/docs/development_guide/build/html/_sources/samples/advance samples/lowpower_demo.rst.txt +++ b/docs/development_guide/build/html/_sources/samples/advance samples/lowpower_demo.rst.txt @@ -1,95 +1,258 @@ -LowPower 低功耗评估 +Power Management ========================= -简介 ------------------------- +本 demo 主要演示 bl 系列 mcu 低功耗性能。具体低功耗介绍请参考 `BL702/704/706 参考手册 `_。 -博流系列芯片拥有丰富的低功耗特性,以适配不同的低功耗应用场合。为了方便用户快速的评测使用 bl 系列 MCU 低功耗性能 bl_mcu_sdk 提供了一套抽象的低功耗接口,将低功耗等级分为四个等级,分别为 +低功耗模式: -1. Running : Running 为 CPU 正常运行时的功耗,由客户应用代码执行的功能决定功耗。 +- Running : Running 为 CPU 正常运行时的功耗,由客户应用代码执行的功能决定功耗。 -2. WFI :WFI 模式,CPU 的 clock 处于被 Gating 状态,CPU 停止运行,当用户退出WFI模式的时候程序将会继续运行。 +- WFI 模式:CPU 的 clock 处于被 Gating 状态,CPU 停止运行,当用户退出WFI模式的时候程序将会继续运行。 -3. PDS : PDS 模式,关闭了芯片上大多数电源域,同时关闭了 CPU,和 CPU 处于同一个电源域的 ITCM,DTCM 等 RAM 不可使用,只有 64K 的 OCTAM 可以保存数据,可以通过内部 RTC 进行唤醒,或者使用 GPIO 引脚(在 GPIO 电源域没有关闭的情况下)唤醒。 +- PDS 模式: 根据不同的模式关闭不同的电源域,当关闭了 CPU 电源域时,ITCM,DTCM RAM 不可使用,只有 64K 的 OCRAM 可以使用。 -4. HBN : HBN 模式,关闭了芯片上绝大多数电源域,关闭了 CPU 以及 64K OCRAM,只有位于 AON 域的 4K RAM 可以保存数据,可以通过内部 RTC 进行唤醒,或者使用特定的唤醒引脚(位于 AON 域的引脚)唤醒。 +- HBN 模式: 根据不同的模式关闭不同的电源域,ITCM,DTCM OCRAM RAM 无法使用,在 hbn0 下位于 AON 域的 4K RAM 可以使用,其他 hbn 模式下 4K RAM 也不可使用。 -bl_mcu_sdk 提供了一个简单的低功耗参考示例(bl_mcu_sdk examples/power/lowpower_test/),旨在帮助用户快速评估低功耗功能,如果需要进一步适配自身的低功耗场景,采取不同的低功耗策略,请查阅相关 datasheet 或者寻找 Boufflao Lab 的技术支持。 -在该示例中,外设及 CPU 的时钟选择均是晶振 32M。基于该示例的功耗测量结果如下表所示: +演示内容: - +------------+------------+------------+---------------------+---------------------------+ - |模式 |参考电流 |对应基础模式|唤醒源 |备注 | - +============+============+============+=====================+===========================+ - |Running |5.68 mA |Run | |所有外设时钟都打开 | - +------------+------------+------------+---------------------+---------------------------+ - |WFI |3.14 mA |WFI |任意中断 |除串口外,其它外设时钟关闭 | - +------------+------------+------------+---------------------+---------------------------+ - |PDS |10 uA |PDS 31 |内部RTC/引脚中断 |64K OCRAM保存数据 | - +------------+------------+------------+---------------------+---------------------------+ - |HBN |1 uA |HBN 1 |内部RTC/引脚中断 |4K AON RAM保存数据 | - +------------+------------+------------+---------------------+---------------------------+ +- pds3 使用 gpio10 外部中断下降沿唤醒 +- pds31 使用 pds 唤醒脚 (gpio6) 唤醒 +- pds31 使用 pds timer 唤醒 +- hbn0 使用 acomp (gpio11) 唤醒 +- hbn1 使用 rtc 唤醒 +- hbn2 使用 hbn 唤醒脚 (gpio12) 唤醒 + +.. note:: 高级别的唤醒源可以唤醒低级别的功耗模式,比如 hbn 唤醒脚可以唤醒所有的低功耗模式。 -上表中的参考电流是通过示例固件测试得出的。符合 bl70x 系列 MCU 的 spec 的描述,run wfi pds hbn 四种等级的定义简化了原先的 hbn level 以及 pds level 的设定。 +准备工具 +----------------------- -见 bl702_bl704_bl706_DS_EN_Combo_1.9.pdf page 28 - -.. figure:: img/powerTable.png - - -**低功耗示例测试方法** ------------------------- - -**编译低功耗示例代码** -^^^^^^^^^^^^^^^^^^^^^^^^ - -在工程目录下键入 ``make APP=lowpower_test SUPPORT_SHELL=y BOARD=bl706_lp`` 完成低功耗示例 bl706 的编译。或者直接使用 CDK 工程,完成编译下载 -您可以参考本文档《快速开发指南》来获取更多编译烧写的信息。 - -当编译并烧写成功后,连接串口到电脑端,并复位芯片,Xshell 会出现如下图所示的页面。 - -.. figure:: img/xShell_lowpower.png - -.. note::当前 demo 仅仅只是测试三种低功耗模式的使用,如果需要测试达到手册中描述的,需要很多步骤,具体步骤请与我们联系。 - -**准备低功耗测试所需的硬件环境** -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -- 可以串联电流表到电源端的电路板 -- 电流表 -- 一台 PC 主机(运行 Windows 或者 Linux 系统) -- TTL 转 USB - -如下图所示,将电流表串联进入 bl706 模组的供电线路,通过 PC 端的串口调试助手软件,下发不同的低功耗指令,使得 bl706 进入对应的低功耗模式 -观察电流表示值,完成评估。 +- pc控制端使用串口终端软件:xshell 或者 mobaxterm +- 可以串联电流表到电源端的电路板 +- 电流表 +- TTL 转 USB +- 滑动变阻器 .. figure:: img/lowpower_arch.png -**使用 Xshell 开始评估低功耗性能** -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -用户可以通过在 Xshell 输入下述指令,进入对应的低功耗模式。 -``run`` +硬件连接 +----------------------------- -- 复位芯片之后,默认进入 run 模式,没有进入任何低功耗模式,芯片实际在运行 while(1); 语句。 +本 demo 基于 BL706_LP 开发板,连接方式如下 -``wfi`` +:: + + GPIO function GPIO pin + ---------------------------------- + PDS_WAKEUP <--> GPIO6 + EXTI <--> GPIO10 + ADC <--> GPIO11 + HBN_WAKEUP <--> GPIO12 + UART0_TX <--> GPIO14 + UART0_RX <--> GPIO15 + +软件实现 +------------------------- + +软件基于 shell 进行调试,如何注册 shell 命令这里不再说明。 + +PDS 模式 +^^^^^^^^^^^^^^^^ + +- 软件代码见 ``examples/pm/pds_mode_wakeup`` + +.. code-block:: C + :linenos: + + #define CONFIG_GPIO6_FUNC GPIO_FUN_WAKEUP + +- pds 唤醒脚配置,pds3 和 pds31 使用,见 ``bsp/board/bl706_lp/pinmux_config.h`` + +.. code-block:: C + :linenos: + + #define CONFIG_GPIO10_FUNC GPIO_FUN_GPIO_EXTI_FALLING_EDGE + +- 外部中断引脚配置,pds3 使用,见 ``bsp/board/bl706_lp/pinmux_config.h`` + +.. code-block:: C + :linenos: + + #define CONFIG_GPIO12_FUNC GPIO_FUN_WAKEUP + +- hbn 唤醒脚配置,pds3 和 pds31 使用,见 ``bsp/board/bl706_lp/pinmux_config.h`` -- 进入 wfi 模式,后面不加任何参数,进入之后,CPU 处于 clock gating 状态,降低功耗 -- 进入 wfi 模式后,任何中断会唤醒,例如 uart 中断。在 Xshell 中敲击回车会触发 BL706 UART RX 中断,因此可以通过此方法唤醒 wfi 低功耗模式。 +.. code-block:: C + :linenos: -``pds sleeptime`` + gpio_attach_irq(GPIO_PIN_10, gpio_int_callback); + gpio_irq_enable(GPIO_PIN_10, ENABLE); //only used for level3 + +- 注册 gpio10 外部中断回调函数并使能 + +.. code-block:: C + :linenos: + + int pds3_enter(int argc, char *argv[]) + { + MSG("gpio wake up case,enter pds3 mode\r\n"); + bflb_platform_delay_ms(50); + + pm_pds_mode_enter(PM_PDS_LEVEL_3, 0); /*hbn、pds、exti gpio can wakeup*/ + BL_CASE_SUCCESS; /*level 3 can run here*/ + return 0; + } + int pds31_enter(int argc, char *argv[]) + { + int second = 0; + + if (argc == 2) { + second = atoi(argv[1]); + } else { + second = 0; + } + MSG("gpio wake up case,enter pds31 mode\r\n"); + bflb_platform_delay_ms(50); + + pm_pds_mode_enter(PM_PDS_LEVEL_31, second); /*hbn、pds gpio can wakeup*/ + + return 0; + } + SHELL_CMD_EXPORT(pds3_enter, pds3 gpio wakeup test) + SHELL_CMD_EXPORT(pds31_enter, pds31 gpio wakeup test) + +- 注册进入 pds3 和 pds31 的命令 + +HBN 模式 +^^^^^^^^^^^^^^^^ + +- 软件代码见 ``examples/pm/hbn_mode_wakeup`` + +.. code-block:: C + :linenos: + + #define CONFIG_GPIO11_FUNC GPIO_FUN_ADC + +- adc 引脚配置,hbn0 下 acomp 使用,见 ``bsp/board/bl706_lp/pinmux_config.h`` + +.. code-block:: C + :linenos: + + #define CONFIG_GPIO12_FUNC GPIO_FUN_WAKEUP + +- hbn 唤醒脚配置,hbn0、hbn1、hbn2 使用,见 ``bsp/board/bl706_lp/pinmux_config.h`` + +.. code-block:: C + :linenos: + + int hbn0_enter(int argc, char *argv[]) + { + acomp_device_t acomp_device; + acomp_device.id = 0; + acomp_device.pos_ch = ACOMP_CHANNEL_ADC_CHANNEL3; /*from gpio11 adc func*/ + acomp_device.neg_ch = ACOMP_CHANNEL_0P375VBAT; + acomp_device.pos_hysteresis_vol = ACOMP_HYSTERESIS_VOLT_50MV; + acomp_device.neg_hysteresis_vol = ACOMP_HYSTERESIS_VOLT_50MV; + acomp_init(&acomp_device); + bflb_platform_delay_ms(50); /*delay for acomp*/ + + for (uint32_t i = 0; i < 30; i++) { + MSG("status:%d\r\n", acomp_get_result(&acomp_device)); + bflb_platform_delay_ms(100); + } + + MSG("acomp wake up case,enter hbn0 mode\r\n"); + bflb_platform_delay_ms(50); + + /** cpu will wakeup when acomp status change + * please note that if you set gpio9-gpio12 with GPIO_FUN_WAKEUP,it will also wakeup this level + * rtc can wakeup this level when sleep time do not equal 0 + **/ + pm_hbn_mode_enter(PM_HBN_LEVEL_0, 0); + + return 0; + } + + int hbn1_enter(int argc, char *argv[]) + { + int second = 0; + + if (argc == 2) { + second = atoi(argv[1]); + } else { + second = 1; + } + + MSG("rtc wake up case,enter hbn1 mode\r\n"); + bflb_platform_delay_ms(50); + /** cpu will wakeup when rtc sleep time timeout + * please note that if you set gpio9-gpio12 with GPIO_FUN_WAKEUP,it will also wakeup this level + **/ + pm_hbn_mode_enter(PM_HBN_LEVEL_1, second); + + return 0; + } + + int hbn2_enter(int argc, char *argv[]) + { + MSG("gpio wake up case,enter hbn2 mode\r\n"); + bflb_platform_delay_ms(50); + + /*cpu will wakeup when you set gpio9-gpio12 with GPIO_FUN_WAKEUP + * rtc can not wakeup level2 + **/ + pm_hbn_mode_enter(PM_HBN_LEVEL_2, 0); + + return 0; + } + +- 注册进入 hbn0、hbn1、hbn2 的命令 -- pds 可以选择带一个 sleeptime 的参数,决定其内部 RTC 唤醒时间。如果指令不带此参数,那么默认不使用 RTC 内部唤醒,目前的固件仅支持上电复位唤醒。 -- 如果指令包含 sleeptime 参数,pds 将会在``sleeptime * clock_period`` 的时刻被唤醒,表现为复位芯片,重新打印起始报文。 -- 进入低功耗模式后,RTC 的时钟是 32K,因此 sleeptime 为 32768 时,表现为睡眠 1S 后唤醒。 +编译和烧录 +----------------------------- -``hbn sleeptime`` +- **CDK 编译** + + 暂无,用户可以自己添加 + +- **命令行编译** + +.. code-block:: bash + :linenos: + + $ cd /bl_mcu_sdk + $ make BOARD=bl706_lp APP=pds_mode_wakeup + $ make BOARD=bl706_lp APP=hbn_mode_wakeup + +- **烧录** + + 详见 :ref:`bl_dev_cube` -- hbn 可以选择带一个 sleeptime 的参数,决定其内部 RTC 唤醒时间。如果指令不带此参数,那么默认不使用 RTC 内部唤醒,目前的固件仅支持上电复位唤醒。 -- 如果指令包含 sleeptime 参数,hbn 将会在``sleeptime * clock_period`` 的时刻被唤醒,表现为复位芯片,重新打印起始报文。 -- 进入低功耗模式后,RTC 的时钟是 32K,因此 sleeptime 为 32768 时,表现为睡眠 1S 后唤醒。 +实验现象 +----------------------------- + +- 首先唤醒脚唤醒方式默认均为下降沿唤醒,所以需要将 GPIO6、GPIO10、GPIO12 引脚外接电阻到 3.3V。 +- acomp 变化电压阈值在 1.2375V,所以需要使用滑动电阻器,调整到 1.2375V(0.375VBAT)后再使用。 +- 打开终端,并按下 TAB 键可以列出命令。 +- 输入需要执行命令回车即可运行。 + +**PDS 模式** + +.. figure:: img/lowpower_pds.gif + :alt: + + +**HBN 模式** + +.. figure:: img/lowpower_hbn.gif + :alt: + +详细测试结果见 `BL702/704/706 数据手册 page 28 `_。 + +.. figure:: img/powerTable.png diff --git a/docs/development_guide/build/html/_sources/samples/advance samples/shell_demo.rst.txt b/docs/development_guide/build/html/_sources/samples/advance samples/shell_demo.rst.txt index e433af2d..3adb66b0 100644 --- a/docs/development_guide/build/html/_sources/samples/advance samples/shell_demo.rst.txt +++ b/docs/development_guide/build/html/_sources/samples/advance samples/shell_demo.rst.txt @@ -190,7 +190,7 @@ SHELL 命令注册 :linenos: $ cd /bl_mcu_sdk - $ make BOARD=bl706_iot APP=shell SUPPORT_SHELL=y + $ make BOARD=bl706_iot APP=shell - **烧录** diff --git a/docs/development_guide/build/html/_sources/samples/advance samples/usb/index.rst.txt b/docs/development_guide/build/html/_sources/samples/advance samples/usb/index.rst.txt index 6286cf70..3778ceec 100644 --- a/docs/development_guide/build/html/_sources/samples/advance samples/usb/index.rst.txt +++ b/docs/development_guide/build/html/_sources/samples/advance samples/usb/index.rst.txt @@ -6,7 +6,7 @@ USB Device 应用 :maxdepth: 1 CDC - 虚拟串口 - MSC - U 盘 + MSC - U 盘升级 HID - 键盘&鼠标 VIDEO - 摄像头 AUDIO - 麦克风 \ No newline at end of file diff --git a/docs/development_guide/build/html/_sources/samples/advance samples/usb/usbd_msc.rst.txt b/docs/development_guide/build/html/_sources/samples/advance samples/usb/usbd_msc.rst.txt index b2a6d06e..da8fecde 100644 --- a/docs/development_guide/build/html/_sources/samples/advance samples/usb/usbd_msc.rst.txt +++ b/docs/development_guide/build/html/_sources/samples/advance samples/usb/usbd_msc.rst.txt @@ -1,2 +1,136 @@ -MSC - U 盘 +MSC - U 盘升级 ==================== + +本 demo 主要演示使用 usb 将 xip flash 模拟成 u 盘设备,将其作为一个 BootLoader 使用,用来升级固件。 + +USB大容量存储设备类(The USB mass storage device class)是一种计算机和移动设备之间的传输协议,它允许一个通用串行总线(USB)设备来访问主机的计算设备,使两者之间进行文件传输。 + +MSC 协议介绍参考 `USB 官方文档 `_。 + +bootloader 我们将其编译后烧录在 flash 0x2000 开始的物理地址,工具默认也是这个地址。 + +.. figure:: img/usb_msc.png + +我们使用 flash 物理地址 0x0000c000 (48K) 开始的地方,用来模拟 u 盘,u 盘大小为 256K(64 个扇区,每个扇区 4KB ),根据文件系统格式,可以知道,数据的地址在 u 盘的第 10 个扇区(0x16000),也即 APP 的入口地址。BootLoader 与 APP 分区表如下: + +.. figure:: img/usb_msc2.png + +准备工具 +----------------------- + +- 一根 usb 数据线 + +硬件连接 +----------------------------- + +- 内部 flash 不需要额外电路 +- 外部 flash 需要连接 flash 控制器接口 + + +:: + + GPIO function GPIO pin + ---------------------------------- + USB_DP <--> GPIO7 + USB_DM <--> GPIO8 + UART0_TX <--> GPIO14 + BOOTLOADER_PIN <--> GPIO15 + +软件实现 +------------------------- + +- 软件代码见 ``examples/usb/usb_msc_flash_boot`` + +.. code-block:: C + :linenos: + + #define BLOCK_SIZE 4096 + #define BLOCK_COUNT 64 + #define FLASH_ADDR 0x0000c000 /*addr start from 48k */ + void usbd_msc_get_cap(uint8_t lun, uint32_t *block_num, uint16_t *block_size) + { + *block_num = BLOCK_COUNT; + *block_size = BLOCK_SIZE; + } + int usbd_msc_sector_read(uint32_t sector, uint8_t *buffer, uint32_t length) + { + flash_read(FLASH_ADDR + sector * BLOCK_SIZE, buffer, length); + return 0; + } + + int usbd_msc_sector_write(uint32_t sector, uint8_t *buffer, uint32_t length) + { + flash_erase(FLASH_ADDR + sector * BLOCK_SIZE, BLOCK_SIZE); + flash_write(FLASH_ADDR + sector * BLOCK_SIZE, buffer, length); + return 0; + } + +- 实现 usb msc 需要的底层接口,u 盘大小 256K,flash 物理地址从 0x0000c000 开始。 + +.. code-block:: C + :linenos: + + gpio_set_mode(GPIO_PIN_15, GPIO_INPUT_PD_MODE); + + if (gpio_read(GPIO_PIN_15)) { + MSG("*************Welcome to usb msc boot,update your app bin*************\r\n"); + + usbd_desc_register(msc_ram_descriptor); + usbd_msc_class_init(MSC_OUT_EP, MSC_IN_EP); + + usb_fs = usb_dc_init(); + + if (usb_fs) { + device_control(usb_fs, DEVICE_CTRL_SET_INT, (void *)(USB_EP4_DATA_OUT_IT | USB_EP5_DATA_IN_IT)); + } + while (!usb_device_is_configured()) { + } + } else { + uint8_t bin_header; + flash_read(FLASH_ADDR + 10 * BLOCK_SIZE, &bin_header, 1); + if ((bin_header == 0x00) && (bin_header == 0xff)) { + MSG("*************Illegal bin!! Please update your bin*************\r\n"); + while (1) { + } + } + + MSG("*************Let's go to application*************\r\n"); + bflb_platform_delay_ms(20); + bflb_platform_deinit(); + hal_jump2app(FLASH_ADDR + 10 * BLOCK_SIZE); + } + +- 配置 GPIO15 作为输入模式,默认拉低,拉高进入 u 盘升级。 +- 如果 GPIO15 为高,则进入 u 盘 升级程序。 +- 如果 GPIO15 为低,则表示不需要升级直接进入 app,此时需要修改内存映射地址,将逻辑地址映射的物理地址(flash offset )从 0x2000 改成实际 app 存储在 flash 的地址为:FLASH_ADDR + 10 * BLOCK_SIZE。 +- ``hal_jump2app`` 中对物理地址进行了判断,bootloader 程序预留 48K,物理地址小于 4M。 + + +编译和烧录 +----------------------------- + +- **CDK 编译** + + 暂无,用户可以自己添加 + +- **命令行编译** + +.. code-block:: bash + :linenos: + + $ cd /bl_mcu_sdk + $ make BOARD=bl706_iot APP=usb_msc_flash_boot + +- **烧录** + + 详见 :ref:`bl_dev_cube` + + +实验现象 +----------------------------- + +- 将 GPIO15 拉高,然后使用 USB 数据线插到电脑上,识别出一个 U 盘。 +- 将编译的 APP bin 文件拖入 U 盘。 +- 拔下 USB ,拉低 GPIO15,供电以后进入 APP 。 + +.. figure:: img/usb_msc3.gif \ No newline at end of file diff --git a/docs/development_guide/build/html/_sources/samples/advance samples/usb/usbd_video.rst.txt b/docs/development_guide/build/html/_sources/samples/advance samples/usb/usbd_video.rst.txt index 2d96691a..798c89d4 100644 --- a/docs/development_guide/build/html/_sources/samples/advance samples/usb/usbd_video.rst.txt +++ b/docs/development_guide/build/html/_sources/samples/advance samples/usb/usbd_video.rst.txt @@ -85,9 +85,7 @@ BL706 AVB + GC0308摄像头模块 + windows 相机 #define CONFIG_GPIO30_FUNC GPIO_FUN_CAM #define CONFIG_GPIO31_FUNC GPIO_FUN_CAM -- 使用到的 GPIO 配置见 ``bsp/board/bl706_avb/pinmux_config.h``,默认提供了该 demo 的引脚配置 - -.. note:: ``bsp/board/bl706_avb/pinmux_config.h`` 当前给所有的示例 demo 使用,所以,需要先选定 ``PINMUX_SELECT`` 为 ``PINMUX_UVC``,开启 UVC demo +- 使用到的 GPIO 配置见 ``bsp/board/bl706_avb/pinmux_config.h`` .. code-block:: C :linenos: diff --git a/docs/development_guide/build/html/_sources/samples/basic samples/flash/flash_demo.rst.txt b/docs/development_guide/build/html/_sources/samples/basic samples/flash/flash_demo.rst.txt new file mode 100644 index 00000000..ea977f03 --- /dev/null +++ b/docs/development_guide/build/html/_sources/samples/basic samples/flash/flash_demo.rst.txt @@ -0,0 +1,59 @@ +XIP FLASH - 数据读写 +====================== + +本 demo 主要演示 xip flash 基本的数据读写功能。 + +硬件连接 +----------------------------- + +- 内部 flash 不需要额外电路 +- 外部 flash 需要连接 flash 控制器接口 + +软件实现 +----------------------------- + +- 软件代码见 ``examples/flash/flash_rw`` + +.. code-block:: C + :linenos: + + /* erase 0x00010000 16k flash */ + flash_erase(0x00010000, 16 * 1024); + + /* write 0x00010000 flash data */ + flash_write(0x00010000, writeTestData, sizeof(writeTestData)); + + memset(readTestData, 0, 256); + + /* read 0x00010000 flash data */ + flash_read(0x00010000, readTestData, sizeof(readTestData)); + +- 擦除 flash 物理地址 0x00010000 开始的 16K 内容 +- 从flash 物理地址 0x00010000 开始写入用户数据 +- 从flash 物理地址 0x00010000 开始读取用户数据 + +编译和烧录 +----------------------------- + +- **CDK 编译** + + 打开项目中提供的工程文件:flash_rw.cdkproj + + 参照 :ref:`windows_cdk_quick_start` 的步骤编译下载即可 + +- **命令行编译** + +.. code-block:: bash + :linenos: + + $ cd /bl_mcu_sdk + $ make BOARD=bl706_iot APP=flash_rw + +- **烧录** + + 详见 :ref:`bl_dev_cube` + +实验现象 +----------------------------- + +打开串口,如果显示 case success 表示读写成功,否则读写错误 \ No newline at end of file diff --git a/docs/development_guide/build/html/_sources/samples/basic samples/flash/index.rst.txt b/docs/development_guide/build/html/_sources/samples/basic samples/flash/index.rst.txt new file mode 100644 index 00000000..66933e01 --- /dev/null +++ b/docs/development_guide/build/html/_sources/samples/basic samples/flash/index.rst.txt @@ -0,0 +1,9 @@ +======================= +XIP FLASH 示例 +======================= + + +.. toctree:: + :maxdepth: 1 + + XIP FLASH - 数据读写 \ No newline at end of file diff --git a/docs/development_guide/build/html/api_reference/api_overview.html b/docs/development_guide/build/html/api_reference/api_overview.html index ce6c45b6..0d4bd902 100644 --- a/docs/development_guide/build/html/api_reference/api_overview.html +++ b/docs/development_guide/build/html/api_reference/api_overview.html @@ -136,13 +136,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

    进阶例程

  • 3. Shell
  • @@ -148,13 +150,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 3. Shell
  • @@ -142,13 +144,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 3. Shell
  • @@ -140,13 +142,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 3. Shell
  • @@ -157,13 +159,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 3. Shell
  • @@ -146,13 +148,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 3. Shell
  • @@ -145,13 +147,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 3. Shell
  • @@ -148,13 +150,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 3. Shell
  • @@ -152,13 +154,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 2.13. USB 设备
  • +
  • 2.14. XIP FLASH 设备
  • +
  • 2.15. PM 设备
  • 3. Shell
  • @@ -147,13 +149,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 3. Shell
  • @@ -152,13 +154,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 3. Shell
  • @@ -148,13 +150,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 3. Shell
  • @@ -149,13 +151,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

    +
  • 2.14. XIP FLASH 设备
  • +
  • 2.15. PM 设备
  • 3. Shell
  • @@ -158,13 +160,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

  • 3. Shell
  • @@ -134,13 +136,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

    diff --git a/docs/development_guide/build/html/api_reference/shell/api_shell.html b/docs/development_guide/build/html/api_reference/shell/api_shell.html index e7eacabe..62dd32a4 100644 --- a/docs/development_guide/build/html/api_reference/shell/api_shell.html +++ b/docs/development_guide/build/html/api_reference/shell/api_shell.html @@ -40,7 +40,7 @@ - + @@ -129,13 +129,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

    +
    +

    4.3.3.2. usbd_msc_get_cap

    +

    usbd_msc_get_cap 用来获取存储器的信息。该接口由用户实现,默认为空。

    +
    void usbd_msc_get_cap(uint8_t lun, uint32_t *block_num, uint16_t *block_size);
    +
    +
    +
      +
    • lun 存储逻辑单元,暂时无用

    • +
    • block_num 存储扇区个数的指针

    • +
    • block_size 存储扇区大小的指针

    • +
    +
    +
    +

    4.3.3.3. usbd_msc_sector_read

    +

    usbd_msc_sector_read 用来对存储器某个扇区开始进行数据读取。该接口由用户实现,默认为空。

    +
    int usbd_msc_sector_read(uint32_t sector, uint8_t *buffer, uint32_t length);
    +
    +
    +
      +
    • sector 扇区偏移

    • +
    • buffer 存储读取的数据的指针

    • +
    • length 读取长度

    • +
    +
    +
    +

    4.3.3.4. usbd_msc_sector_write

    +

    usbd_msc_sector_write 用来对存储器某个扇区开始写入数据。该接口由用户实现,默认为空。

    +
    int usbd_msc_sector_write(uint32_t sector, uint8_t *buffer, uint32_t length);
    +
    +
    +
      +
    • sector 扇区偏移

    • +
    • buffer 写入数据指针

    • +
    • length 写入长度

    • +
    +

    4.3.4. USB Device HID 类接口

    @@ -442,6 +520,40 @@
  • intf 接口句柄

  • +
    +

    4.3.4.2. usbd_hid_report_descriptor_register

    +

    usbd_hid_report_descriptor_register 用来对存储器某个扇区开始写入数据。该接口由用户实现,默认为空。

    +
    void usbd_hid_report_descriptor_register(uint8_t intf_num, const uint8_t *desc, uint32_t desc_len);
    +
    +
    +
      +
    • intf_num 当前 hid 报告描述符所在接口偏移

    • +
    • desc 报告描述符

    • +
    • desc_len 报告描述符长度

    • +
    +
    +
    +

    4.3.4.3. usbd_hid_set_request_callback

    +

    usbd_hid_set_request_callback 用来对存储器某个扇区开始写入数据。该接口由用户实现,默认为空。

    +
    void usbd_hid_set_request_callback( uint8_t intf_num,
    +                                    uint8_t (*get_report_callback)(uint8_t report_id, uint8_t report_type),
    +                                    void (*set_report_callback)(uint8_t report_id, uint8_t report_type, uint8_t *report, uint8_t report_len),
    +                                    uint8_t (*get_idle_callback)(uint8_t report_id),
    +                                    void (*set_idle_callback)(uint8_t report_id, uint8_t duration),
    +                                    void (*set_protocol_callback)(uint8_t protocol),
    +                                    uint8_t (*get_protocol_callback)(void));
    +
    +
    +
      +
    • intf_num 当前 hid 报告描述符所在接口偏移

    • +
    • get_report_callback get report命令处理回调函数

    • +
    • set_report_callback set report命令处理回调函数

    • +
    • get_idle_callback get idle命令处理回调函数

    • +
    • set_idle_callback set idle命令处理回调函数

    • +
    • set_protocol_callback set protocol命令处理回调函数

    • +
    • get_protocol_callback get protocol命令处理回调函数

    • +
    +

    4.3.5. USB Device AUDIO 类接口

    diff --git a/docs/development_guide/build/html/genindex.html b/docs/development_guide/build/html/genindex.html index c6e8f695..db020248 100644 --- a/docs/development_guide/build/html/genindex.html +++ b/docs/development_guide/build/html/genindex.html @@ -117,13 +117,14 @@
  • 8. I2S 示例
  • 9. ADC 示例
  • 10. TIMER 示例
  • +
  • 11. XIP FLASH 示例
  • 进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    进阶例程

    • 1. Shell 命令行调试
    • -
    • 2. Fatfs 文件系统读写
    • +
    • 2. FatFs 文件系统读写(SD 卡)
    • 3. USB Device 应用
    • -
    • 4. LowPower 低功耗评估
    • +
    • 4. Power Management
    • 5. BOOT2 IAP
    • 6. BLE 客户端和服务端互连
      1
       2
       $ cd <sdk_path>/bl_mcu_sdk
      - $ make BOARD=bl706_iot APP=ble_peripheral SUPPORT_FREERTOS=y SUPPORT_FLOAT=y SUPPORT_BLE=y
      + $ make BOARD=bl706_iot APP=ble_peripheral SUPPORT_FLOAT=y
       
      1
       2
       $ cd <sdk_path>/bl_mcu_sdk
      - $ make BOARD=bl706_iot APP=ble_central SUPPORT_FREERTOS=y SUPPORT_FLOAT=y SUPPORT_BLE=y
      + $ make BOARD=bl706_iot APP=ble_central SUPPORT_FLOAT=y
       
        diff --git a/docs/development_guide/build/html/samples/advance samples/boot2_iap_info.html b/docs/development_guide/build/html/samples/advance samples/boot2_iap_info.html index 79eaf8c3..dc0480be 100644 --- a/docs/development_guide/build/html/samples/advance samples/boot2_iap_info.html +++ b/docs/development_guide/build/html/samples/advance samples/boot2_iap_info.html @@ -40,7 +40,7 @@ - + @@ -119,13 +119,14 @@
      • 8. I2S 示例
      • 9. ADC 示例
      • 10. TIMER 示例
      • +
      • 11. XIP FLASH 示例

      进阶例程

      • 1. Shell 命令行调试
      • -
      • 2. Fatfs 文件系统读写
      • +
      • 2. FatFs 文件系统读写(SD 卡)
      • 3. USB Device 应用
      • -
      • 4. LowPower 低功耗评估
      • +
      • 4. Power Management
      • 5. BOOT2 IAP
        • 5.1. 准备工具
        • 5.2. 实验现象
        • @@ -210,12 +211,12 @@

          Bouffalo Lab 为 IAP 功能应用提供了相应的 boot2_iap.bin 文件,并将其与 Dev Cube 软件包同步发布。 用户可以配合 Dev Cube 图形界面烧写软件,将已有的 boot2_iap.bin 文件烧录进目标板,烧录 一次之后,就可以通过 IAP 功能,在线更新用户代码。

          -

          bl_mcu_sdk 开源了 boot2_iap 的软件源码,用户可以到 examples/boot2_iap 查阅代码,并完成编译烧写。编译烧写过程可以参考《快速开发指南》介绍。

          +

          bl_mcu_sdk 开源了 boot2_iap 的软件源码,用户可以到 examples/boot2_iap 查阅代码,并完成编译烧写。编译烧写过程可以参考《快速开发指南》介绍。

          5.1. 准备工具

          • 最新版本的 Dev Cube

          • -
          • Bl706 开发板

          • +
          • BL706 开发板

          • TTL-USB 电平转换芯片

          @@ -232,7 +233,7 @@

          diff --git a/docs/development_guide/build/html/samples/advance samples/emac/eth_basic.html b/docs/development_guide/build/html/samples/advance samples/emac/eth_basic.html index 500e562d..d7a157b5 100644 --- a/docs/development_guide/build/html/samples/advance samples/emac/eth_basic.html +++ b/docs/development_guide/build/html/samples/advance samples/emac/eth_basic.html @@ -119,13 +119,14 @@
        • 8. I2S 示例
        • 9. ADC 示例
        • 10. TIMER 示例
        • +
        • 11. XIP FLASH 示例

        进阶例程

        • 1. Shell 命令行调试
        • -
        • 2. Fatfs 文件系统读写
        • +
        • 2. FatFs 文件系统读写(SD 卡)
        • 3. USB Device 应用
        • -
        • 4. LowPower 低功耗评估
        • +
        • 4. Power Management
        • 5. BOOT2 IAP
        • 6. BLE 客户端和服务端互连
        • 7. EMAC 以太网应用
            diff --git a/docs/development_guide/build/html/samples/advance samples/emac/eth_http_server.html b/docs/development_guide/build/html/samples/advance samples/emac/eth_http_server.html index 6ea6368d..73fb6bc4 100644 --- a/docs/development_guide/build/html/samples/advance samples/emac/eth_http_server.html +++ b/docs/development_guide/build/html/samples/advance samples/emac/eth_http_server.html @@ -119,13 +119,14 @@
          • 8. I2S 示例
          • 9. ADC 示例
          • 10. TIMER 示例
          • +
          • 11. XIP FLASH 示例

          进阶例程

          • 1. Shell 命令行调试
          • -
          • 2. Fatfs 文件系统读写
          • +
          • 2. FatFs 文件系统读写(SD 卡)
          • 3. USB Device 应用
          • -
          • 4. LowPower 低功耗评估
          • +
          • 4. Power Management
          • 5. BOOT2 IAP
          • 6. BLE 客户端和服务端互连
          • 7. EMAC 以太网应用
              diff --git a/docs/development_guide/build/html/samples/advance samples/emac/eth_lwip_iperf.html b/docs/development_guide/build/html/samples/advance samples/emac/eth_lwip_iperf.html index ac1268f1..f8c2c7b8 100644 --- a/docs/development_guide/build/html/samples/advance samples/emac/eth_lwip_iperf.html +++ b/docs/development_guide/build/html/samples/advance samples/emac/eth_lwip_iperf.html @@ -118,13 +118,14 @@
            • 8. I2S 示例
            • 9. ADC 示例
            • 10. TIMER 示例
            • +
            • 11. XIP FLASH 示例

            进阶例程

            • 1. Shell 命令行调试
            • -
            • 2. Fatfs 文件系统读写
            • +
            • 2. FatFs 文件系统读写(SD 卡)
            • 3. USB Device 应用
            • -
            • 4. LowPower 低功耗评估
            • +
            • 4. Power Management
            • 5. BOOT2 IAP
            • 6. BLE 客户端和服务端互连
            • 7. EMAC 以太网应用
                diff --git a/docs/development_guide/build/html/samples/advance samples/emac/eth_tcp_echo.html b/docs/development_guide/build/html/samples/advance samples/emac/eth_tcp_echo.html index e7f04b6f..8d557e11 100644 --- a/docs/development_guide/build/html/samples/advance samples/emac/eth_tcp_echo.html +++ b/docs/development_guide/build/html/samples/advance samples/emac/eth_tcp_echo.html @@ -119,13 +119,14 @@
              • 8. I2S 示例
              • 9. ADC 示例
              • 10. TIMER 示例
              • +
              • 11. XIP FLASH 示例

              进阶例程

              • 1. Shell 命令行调试
              • -
              • 2. Fatfs 文件系统读写
              • +
              • 2. FatFs 文件系统读写(SD 卡)
              • 3. USB Device 应用
              • -
              • 4. LowPower 低功耗评估
              • +
              • 4. Power Management
              • 5. BOOT2 IAP
              • 6. BLE 客户端和服务端互连
              • 7. EMAC 以太网应用
                  diff --git a/docs/development_guide/build/html/samples/advance samples/emac/eth_udp_echo.html b/docs/development_guide/build/html/samples/advance samples/emac/eth_udp_echo.html index b872a72e..43aa5c51 100644 --- a/docs/development_guide/build/html/samples/advance samples/emac/eth_udp_echo.html +++ b/docs/development_guide/build/html/samples/advance samples/emac/eth_udp_echo.html @@ -119,13 +119,14 @@
                • 8. I2S 示例
                • 9. ADC 示例
                • 10. TIMER 示例
                • +
                • 11. XIP FLASH 示例

                进阶例程

                • 1. Shell 命令行调试
                • -
                • 2. Fatfs 文件系统读写
                • +
                • 2. FatFs 文件系统读写(SD 卡)
                • 3. USB Device 应用
                • -
                • 4. LowPower 低功耗评估
                • +
                • 4. Power Management
                • 5. BOOT2 IAP
                • 6. BLE 客户端和服务端互连
                • 7. EMAC 以太网应用
                    diff --git a/docs/development_guide/build/html/samples/advance samples/emac/index.html b/docs/development_guide/build/html/samples/advance samples/emac/index.html index 6bfdfe3d..322ba9cb 100644 --- a/docs/development_guide/build/html/samples/advance samples/emac/index.html +++ b/docs/development_guide/build/html/samples/advance samples/emac/index.html @@ -119,13 +119,14 @@
                  • 8. I2S 示例
                  • 9. ADC 示例
                  • 10. TIMER 示例
                  • +
                  • 11. XIP FLASH 示例

                  进阶例程

                  • 1. Shell 命令行调试
                  • -
                  • 2. Fatfs 文件系统读写
                  • +
                  • 2. FatFs 文件系统读写(SD 卡)
                  • 3. USB Device 应用
                  • -
                  • 4. LowPower 低功耗评估
                  • +
                  • 4. Power Management
                  • 5. BOOT2 IAP
                  • 6. BLE 客户端和服务端互连
                  • 7. EMAC 以太网应用
                      diff --git a/docs/development_guide/build/html/samples/advance samples/fatfs_demo.html b/docs/development_guide/build/html/samples/advance samples/fatfs_demo.html index d6076b30..7222a92b 100644 --- a/docs/development_guide/build/html/samples/advance samples/fatfs_demo.html +++ b/docs/development_guide/build/html/samples/advance samples/fatfs_demo.html @@ -7,7 +7,7 @@ - 2. Fatfs 文件系统读写 — BL_MCU_SDK 开发指南 0.3 文档 + 2. FatFs 文件系统读写(SD 卡) — BL_MCU_SDK 开发指南 0.3 文档 @@ -119,13 +119,21 @@
                    • 8. I2S 示例
                    • 9. ADC 示例
                    • 10. TIMER 示例
                    • +
                    • 11. XIP FLASH 示例

                    进阶例程

                    • 1. Shell 命令行调试
                    • -
                    • 2. Fatfs 文件系统读写
                    • +
                    • 2. FatFs 文件系统读写(SD 卡) +
                    • 3. USB Device 应用
                    • -
                    • 4. LowPower 低功耗评估
                    • +
                    • 4. Power Management
                    • 5. BOOT2 IAP
                    • 6. BLE 客户端和服务端互连
                    • 7. EMAC 以太网应用
                    • @@ -177,7 +185,7 @@
                    • »
                    • -
                    • 2. Fatfs 文件系统读写
                    • +
                    • 2. FatFs 文件系统读写(SD 卡)
                    • @@ -196,8 +204,225 @@
                      -
                      -

                      2. Fatfs 文件系统读写

                      +
                      +

                      2. FatFs 文件系统读写(SD 卡)

                      +

                      本 demo 主要演示使用 spi 驱动 sd 卡并挂载 fatfs 文件系统的例子。其中 fatfs api 见 Fatfs 官网

                      +
                      +

                      2.1. 准备工具

                      +
                        +
                      • 一张 class10 的 sd 卡和 sd 卡转spi 转接板

                      • +
                      +
                      +
                      +

                      2.2. 硬件连接

                      +

                      本 demo 基于 BL706_AVB 开发板,连接方式如下

                      +
                         GPIO function         GPIO pin
                      +----------------------------------
                      +    SD_CS       <-->     GPIO10
                      +    SPI_SCK     <-->     GPIO19
                      +    SPI_MISO    <-->     GPIO20
                      +    SPI_MOSI    <-->     GPIO21
                      +
                      +
                      +
                      +
                      +

                      2.3. 软件实现

                      +
                        +
                      • 软件代码见 examples/spi/spi_dma_sd

                      • +
                      +
                      1
                      +2
                      #define BSP_SPI_CLOCK_SOURCE  ROOT_CLOCK_SOURCE_BCLK
                      +#define BSP_SPI_CLOCK_DIV  0
                      +
                      +
                      +
                        +
                      • 配置 SPI 设备时钟源,见 bsp/board/bl706_avb/clock_config.h

                      • +
                      +
                      1
                      +2
                      +3
                      #define CONFIG_GPIO19_FUNC GPIO_FUN_SPI
                      +#define CONFIG_GPIO20_FUNC GPIO_FUN_SPI
                      +#define CONFIG_GPIO21_FUNC GPIO_FUN_SPI
                      +
                      +
                      +
                        +
                      • 配置 SPI 设备复用引脚,见 bsp/board/bl706_avb/pinmux_config.h,,如有改动,请自行修改

                      • +
                      +
                      +

                      注解

                      +

                      为适配 bl702_avb 硬件, SPI 的 MOSI 和 MISO 默认进行了调换,如果想要恢复默认,修改 drivers/bl702_driver/hal_drv/default_config/spi_config.hSPI_SWAP_ENABLE 为 0

                      +
                      +
                       1
                      + 2
                      + 3
                      + 4
                      + 5
                      + 6
                      + 7
                      + 8
                      + 9
                      +10
                      +11
                      +12
                      +13
                      +14
                      +15
                      +16
                      +17
                      #define BSP_USING_SPI0
                      +
                      +#if defined(BSP_USING_SPI0)
                      +#ifndef SPI0_CONFIG
                      +#define SPI0_CONFIG \
                      +{   \
                      +.id = 0, \
                      +.clk = 18000000,\
                      +.mode = SPI_MASTER_MODE, \
                      +.direction = SPI_MSB_BYTE0_DIRECTION_FIRST, \
                      +.clk_polaraity = SPI_POLARITY_LOW, \
                      +.clk_phase = SPI_PHASE_1EDGE, \
                      +.datasize = SPI_DATASIZE_8BIT, \
                      +.fifo_threshold = 4, \
                      +}
                      +#endif
                      +#endif
                      +
                      +
                      +
                        +
                      • 使能 BSP_USING_SPI0 并配置 SPI 设备配置,见 bsp/board/bl706_avb/peripheral_config.h

                      • +
                      +
                      +

                      注解

                      +

                      sd卡的频率不能过高,所以设置成 18M 比较合适

                      +
                      +
                       1
                      + 2
                      + 3
                      + 4
                      + 5
                      + 6
                      + 7
                      + 8
                      + 9
                      +10
                      +11
                      +12
                      +13
                      +14
                      +15
                      +16
                      +17
                      +18
                      +19
                      +20
                      +21
                      +22
                      +23
                      +24
                      +25
                      +26
                      +27
                      +28
                      +29
                      +30
                      +31
                      +32
                      +33
                      +34
                      #define BSP_USING_DMA0_CH3
                      +#define BSP_USING_DMA0_CH4
                      +
                      +#if defined(BSP_USING_DMA0_CH3)
                      +#ifndef DMA0_CH3_CONFIG
                      +#define DMA0_CH3_CONFIG                       \
                      +    {                                         \
                      +        .id = 0,                              \
                      +        .ch = 3,                              \
                      +        .direction = DMA_MEMORY_TO_PERIPH,    \
                      +        .transfer_mode = DMA_LLI_ONCE_MODE,   \
                      +        .src_req = DMA_REQUEST_NONE,          \
                      +        .dst_req = DMA_REQUEST_SPI0_TX,       \
                      +        .src_width = DMA_TRANSFER_WIDTH_8BIT, \
                      +        .dst_width = DMA_TRANSFER_WIDTH_8BIT, \
                      +    }
                      +#endif
                      +#endif
                      +
                      +#if defined(BSP_USING_DMA0_CH4)
                      +#ifndef DMA0_CH4_CONFIG
                      +#define DMA0_CH4_CONFIG                       \
                      +    {                                         \
                      +        .id = 0,                              \
                      +        .ch = 4,                              \
                      +        .direction = DMA_PERIPH_TO_MEMORY,    \
                      +        .transfer_mode = DMA_LLI_ONCE_MODE,   \
                      +        .src_req = DMA_REQUEST_SPI0_RX,       \
                      +        .dst_req = DMA_REQUEST_NONE,          \
                      +        .src_width = DMA_TRANSFER_WIDTH_8BIT, \
                      +        .dst_width = DMA_TRANSFER_WIDTH_8BIT, \
                      +    }
                      +#endif
                      +#endif
                      +
                      +
                      +
                        +
                      • 使能 BSP_USING_DMA0_CH3BSP_USING_DMA0_CH4 并配置 DMA 设备配置,见 bsp/board/bl706_avb/peripheral_config.h

                      • +
                      +
                       1
                      + 2
                      + 3
                      + 4
                      + 5
                      + 6
                      + 7
                      + 8
                      + 9
                      +10
                      +11
                      +12
                      +13
                      +14
                      void fatfs_sd_driver_register(void)
                      +{
                      +    FATFS_DiskioDriverTypeDef sdDiskioDriver;
                      +
                      +    memset(&sdDiskioDriver, 0, sizeof(FATFS_DiskioDriverTypeDef));
                      +
                      +    sdDiskioDriver.MMC_disk_status = sd_disk_status;
                      +    sdDiskioDriver.MMC_disk_initialize = sd_disk_initialize;
                      +    sdDiskioDriver.MMC_disk_write = sd_disk_write;
                      +    sdDiskioDriver.MMC_disk_read = sd_disk_read;
                      +    sdDiskioDriver.MMC_disk_ioctl = sd_disk_ioctl;
                      +    sdDiskioDriver.Translate_Result_Code = Translate_Result_Code;
                      +    disk_driver_callback_init(&sdDiskioDriver);
                      +}
                      +
                      +
                      +
                        +
                      • 实现 fatfs 需要的底层接口

                      • +
                      +

                      剩余代码见 main.c。

                      +
                      +
                      +

                      2.4. 编译和烧录

                      + +
                      1
                      +2
                       $ cd <sdk_path>/bl_mcu_sdk
                      + $ make BOARD=bl706_avb APP=spi_dma_sd
                      +
                      +
                      + +
                      +
                      +

                      2.5. 实验现象

                      +
                      diff --git a/docs/development_guide/build/html/samples/advance samples/lowpower_demo.html b/docs/development_guide/build/html/samples/advance samples/lowpower_demo.html index b17a06b5..e5ff1d48 100644 --- a/docs/development_guide/build/html/samples/advance samples/lowpower_demo.html +++ b/docs/development_guide/build/html/samples/advance samples/lowpower_demo.html @@ -7,7 +7,7 @@ - 4. LowPower 低功耗评估 — BL_MCU_SDK 开发指南 0.3 文档 + 4. Power Management — BL_MCU_SDK 开发指南 0.3 文档 @@ -119,20 +119,23 @@
                    • 8. I2S 示例
                    • 9. ADC 示例
                    • 10. TIMER 示例
                    • +
                    • 11. XIP FLASH 示例

                    进阶例程

                    • 1. Shell 命令行调试
                    • -
                    • 2. Fatfs 文件系统读写
                    • +
                    • 2. FatFs 文件系统读写(SD 卡)
                    • 3. USB Device 应用
                    • -
                    • 4. LowPower 低功耗评估
                        -
                      • 4.1. 简介
                      • -
                      • 4.2. 低功耗示例测试方法
                          -
                        • 4.2.1. 编译低功耗示例代码
                        • -
                        • 4.2.2. 准备低功耗测试所需的硬件环境
                        • -
                        • 4.2.3. 使用 Xshell 开始评估低功耗性能
                        • +
                        • 4. Power Management
                        • 5. BOOT2 IAP
                        • @@ -186,7 +189,7 @@
                        • »
                        • -
                        • 4. LowPower 低功耗评估
                        • +
                        • 4. Power Management
                        • @@ -205,119 +208,334 @@
                          -
                          -

                          4. LowPower 低功耗评估

                          -
                          -

                          4.1. 简介

                          -

                          博流系列芯片拥有丰富的低功耗特性,以适配不同的低功耗应用场合。为了方便用户快速的评测使用 bl 系列 MCU 低功耗性能 bl_mcu_sdk 提供了一套抽象的低功耗接口,将低功耗等级分为四个等级,分别为

                          -
                            -
                          1. Running : Running 为 CPU 正常运行时的功耗,由客户应用代码执行的功能决定功耗。

                          2. -
                          3. WFI :WFI 模式,CPU 的 clock 处于被 Gating 状态,CPU 停止运行,当用户退出WFI模式的时候程序将会继续运行。

                          4. -
                          5. PDS : PDS 模式,关闭了芯片上大多数电源域,同时关闭了 CPU,和 CPU 处于同一个电源域的 ITCM,DTCM 等 RAM 不可使用,只有 64K 的 OCTAM 可以保存数据,可以通过内部 RTC 进行唤醒,或者使用 GPIO 引脚(在 GPIO 电源域没有关闭的情况下)唤醒。

                          6. -
                          7. HBN : HBN 模式,关闭了芯片上绝大多数电源域,关闭了 CPU 以及 64K OCRAM,只有位于 AON 域的 4K RAM 可以保存数据,可以通过内部 RTC 进行唤醒,或者使用特定的唤醒引脚(位于 AON 域的引脚)唤醒。

                          8. -
                          -

                          bl_mcu_sdk 提供了一个简单的低功耗参考示例(bl_mcu_sdk examples/power/lowpower_test/),旨在帮助用户快速评估低功耗功能,如果需要进一步适配自身的低功耗场景,采取不同的低功耗策略,请查阅相关 datasheet 或者寻找 Boufflao Lab 的技术支持。 -在该示例中,外设及 CPU 的时钟选择均是晶振 32M。基于该示例的功耗测量结果如下表所示:

                          -
                          -
                          ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                          模式

                          参考电流

                          对应基础模式

                          唤醒源

                          备注

                          Running

                          5.68 mA

                          Run

                          所有外设时钟都打开

                          WFI

                          3.14 mA

                          WFI

                          任意中断

                          除串口外,其它外设时钟关闭

                          PDS

                          10 uA

                          PDS 31

                          内部RTC/引脚中断

                          64K OCRAM保存数据

                          HBN

                          1 uA

                          HBN 1

                          内部RTC/引脚中断

                          4K AON RAM保存数据

                          -
                          -

                          上表中的参考电流是通过示例固件测试得出的。符合 bl70x 系列 MCU 的 spec 的描述,run wfi pds hbn 四种等级的定义简化了原先的 hbn level 以及 pds level 的设定。

                          -

                          见 bl702_bl704_bl706_DS_EN_Combo_1.9.pdf page 28

                          -
                          -../../_images/powerTable.png -
                          -
                          -
                          -

                          4.2. 低功耗示例测试方法

                          -
                          -

                          4.2.1. 编译低功耗示例代码

                          -

                          在工程目录下键入 make APP=lowpower_test  SUPPORT_SHELL=y BOARD=bl706_lp 完成低功耗示例 bl706 的编译。或者直接使用 CDK 工程,完成编译下载 -您可以参考本文档《快速开发指南》来获取更多编译烧写的信息。

                          -

                          当编译并烧写成功后,连接串口到电脑端,并复位芯片,Xshell 会出现如下图所示的页面。

                          -
                          -../../_images/xShell_lowpower.png -
                          -
                          -
                          -

                          4.2.2. 准备低功耗测试所需的硬件环境

                          +
                          +

                          4. Power Management

                          +

                          本 demo 主要演示 bl 系列 mcu 低功耗性能。具体低功耗介绍请参考 BL702/704/706 参考手册

                          +

                          低功耗模式:

                            +
                          • Running : Running 为 CPU 正常运行时的功耗,由客户应用代码执行的功能决定功耗。

                          • +
                          • WFI 模式:CPU 的 clock 处于被 Gating 状态,CPU 停止运行,当用户退出WFI模式的时候程序将会继续运行。

                          • +
                          • PDS 模式: 根据不同的模式关闭不同的电源域,当关闭了 CPU 电源域时,ITCM,DTCM RAM 不可使用,只有 64K 的 OCRAM 可以使用。

                          • +
                          • HBN 模式: 根据不同的模式关闭不同的电源域,ITCM,DTCM OCRAM RAM 无法使用,在 hbn0 下位于 AON 域的 4K RAM 可以使用,其他 hbn 模式下 4K RAM 也不可使用。

                          • +
                          +

                          演示内容:

                          +
                            +
                          • pds3 使用 gpio10 外部中断下降沿唤醒

                          • +
                          • pds31 使用 pds 唤醒脚 (gpio6) 唤醒

                          • +
                          • pds31 使用 pds timer 唤醒

                          • +
                          • hbn0 使用 acomp (gpio11) 唤醒

                          • +
                          • hbn1 使用 rtc 唤醒

                          • +
                          • hbn2 使用 hbn 唤醒脚 (gpio12) 唤醒

                          • +
                          +
                          +

                          注解

                          +

                          高级别的唤醒源可以唤醒低级别的功耗模式,比如 hbn 唤醒脚可以唤醒所有的低功耗模式。

                          +
                          +
                          +

                          4.1. 准备工具

                          +
                            +
                          • pc控制端使用串口终端软件:xshell 或者 mobaxterm

                          • 可以串联电流表到电源端的电路板

                          • 电流表

                          • -
                          • 一台 PC 主机(运行 Windows 或者 Linux 系统)

                          • TTL 转 USB

                          • +
                          • 滑动变阻器

                          -

                          如下图所示,将电流表串联进入 bl706 模组的供电线路,通过 PC 端的串口调试助手软件,下发不同的低功耗指令,使得 bl706 进入对应的低功耗模式 -观察电流表示值,完成评估。

                          ../../_images/lowpower_arch.png
                          -
                          -

                          4.2.3. 使用 Xshell 开始评估低功耗性能

                          -

                          用户可以通过在 Xshell 输入下述指令,进入对应的低功耗模式。

                          -

                          run

                          +
                          +

                          4.2. 硬件连接

                          +

                          本 demo 基于 BL706_LP 开发板,连接方式如下

                          +
                             GPIO function         GPIO pin
                          +----------------------------------
                          +    PDS_WAKEUP    <-->     GPIO6
                          +    EXTI          <-->     GPIO10
                          +    ADC           <-->     GPIO11
                          +    HBN_WAKEUP    <-->     GPIO12
                          +    UART0_TX      <-->     GPIO14
                          +    UART0_RX      <-->     GPIO15
                          +
                          +
                          +
                          +
                          +

                          4.3. 软件实现

                          +

                          软件基于 shell 进行调试,如何注册 shell 命令这里不再说明。

                          +
                          +

                          4.3.1. PDS 模式

                            -
                          • 复位芯片之后,默认进入 run 模式,没有进入任何低功耗模式,芯片实际在运行 while(1); 语句。

                          • +
                          • 软件代码见 examples/pm/pds_mode_wakeup

                          -

                          wfi

                          +
                          1
                          #define CONFIG_GPIO6_FUNC GPIO_FUN_WAKEUP
                          +
                          +
                            -
                          • 进入 wfi 模式,后面不加任何参数,进入之后,CPU 处于 clock gating 状态,降低功耗

                          • -
                          • 进入 wfi 模式后,任何中断会唤醒,例如 uart 中断。在 Xshell 中敲击回车会触发 BL706 UART RX 中断,因此可以通过此方法唤醒 wfi 低功耗模式。

                          • +
                          • pds 唤醒脚配置,pds3 和 pds31 使用,见 bsp/board/bl706_lp/pinmux_config.h

                          -

                          pds sleeptime

                          +
                          1
                          #define CONFIG_GPIO10_FUNC GPIO_FUN_GPIO_EXTI_FALLING_EDGE
                          +
                          +
                            -
                          • pds 可以选择带一个 sleeptime 的参数,决定其内部 RTC 唤醒时间。如果指令不带此参数,那么默认不使用 RTC 内部唤醒,目前的固件仅支持上电复位唤醒。

                          • -
                          • 如果指令包含 sleeptime 参数,pds 将会在``sleeptime * clock_period`` 的时刻被唤醒,表现为复位芯片,重新打印起始报文。

                          • -
                          • 进入低功耗模式后,RTC 的时钟是 32K,因此 sleeptime 为 32768 时,表现为睡眠 1S 后唤醒。

                          • +
                          • 外部中断引脚配置,pds3 使用,见 bsp/board/bl706_lp/pinmux_config.h

                          -

                          hbn sleeptime

                          +
                          1
                          #define CONFIG_GPIO12_FUNC GPIO_FUN_WAKEUP
                          +
                          +
                            -
                          • hbn 可以选择带一个 sleeptime 的参数,决定其内部 RTC 唤醒时间。如果指令不带此参数,那么默认不使用 RTC 内部唤醒,目前的固件仅支持上电复位唤醒。

                          • -
                          • 如果指令包含 sleeptime 参数,hbn 将会在``sleeptime * clock_period`` 的时刻被唤醒,表现为复位芯片,重新打印起始报文。

                          • -
                          • 进入低功耗模式后,RTC 的时钟是 32K,因此 sleeptime 为 32768 时,表现为睡眠 1S 后唤醒。

                          • +
                          • hbn 唤醒脚配置,pds3 和 pds31 使用,见 bsp/board/bl706_lp/pinmux_config.h

                          +
                          1
                          +2
                          gpio_attach_irq(GPIO_PIN_10, gpio_int_callback);
                          +gpio_irq_enable(GPIO_PIN_10, ENABLE); //only used for level3
                          +
                          +
                          +
                            +
                          • 注册 gpio10 外部中断回调函数并使能

                          • +
                          +
                           1
                          + 2
                          + 3
                          + 4
                          + 5
                          + 6
                          + 7
                          + 8
                          + 9
                          +10
                          +11
                          +12
                          +13
                          +14
                          +15
                          +16
                          +17
                          +18
                          +19
                          +20
                          +21
                          +22
                          +23
                          +24
                          +25
                          +26
                          +27
                          int pds3_enter(int argc, char *argv[])
                          +{
                          +    MSG("gpio wake up case,enter pds3 mode\r\n");
                          +    bflb_platform_delay_ms(50);
                          +
                          +    pm_pds_mode_enter(PM_PDS_LEVEL_3, 0); /*hbn、pds、exti gpio can wakeup*/
                          +    BL_CASE_SUCCESS;                      /*level 3 can run here*/
                          +    return 0;
                          +}
                          +int pds31_enter(int argc, char *argv[])
                          +{
                          +    int second = 0;
                          +
                          +    if (argc == 2) {
                          +        second = atoi(argv[1]);
                          +    } else {
                          +        second = 0;
                          +    }
                          +    MSG("gpio wake up case,enter pds31 mode\r\n");
                          +    bflb_platform_delay_ms(50);
                          +
                          +    pm_pds_mode_enter(PM_PDS_LEVEL_31, second); /*hbn、pds gpio can wakeup*/
                          +
                          +    return 0;
                          +}
                          +SHELL_CMD_EXPORT(pds3_enter, pds3 gpio wakeup test)
                          +SHELL_CMD_EXPORT(pds31_enter, pds31 gpio wakeup test)
                          +
                          +
                          +
                            +
                          • 注册进入 pds3 和 pds31 的命令

                          • +
                          +
                          +
                          +

                          4.3.2. HBN 模式

                          +
                            +
                          • 软件代码见 examples/pm/hbn_mode_wakeup

                          • +
                          +
                          1
                          #define CONFIG_GPIO11_FUNC GPIO_FUN_ADC
                          +
                          +
                          +
                            +
                          • adc 引脚配置,hbn0 下 acomp 使用,见 bsp/board/bl706_lp/pinmux_config.h

                          • +
                          +
                          1
                          #define CONFIG_GPIO12_FUNC GPIO_FUN_WAKEUP
                          +
                          +
                          +
                            +
                          • hbn 唤醒脚配置,hbn0、hbn1、hbn2 使用,见 bsp/board/bl706_lp/pinmux_config.h

                          • +
                          +
                           1
                          + 2
                          + 3
                          + 4
                          + 5
                          + 6
                          + 7
                          + 8
                          + 9
                          +10
                          +11
                          +12
                          +13
                          +14
                          +15
                          +16
                          +17
                          +18
                          +19
                          +20
                          +21
                          +22
                          +23
                          +24
                          +25
                          +26
                          +27
                          +28
                          +29
                          +30
                          +31
                          +32
                          +33
                          +34
                          +35
                          +36
                          +37
                          +38
                          +39
                          +40
                          +41
                          +42
                          +43
                          +44
                          +45
                          +46
                          +47
                          +48
                          +49
                          +50
                          +51
                          +52
                          +53
                          +54
                          +55
                          +56
                          +57
                          +58
                          +59
                          +60
                          int hbn0_enter(int argc, char *argv[])
                          +{
                          +    acomp_device_t acomp_device;
                          +    acomp_device.id = 0;
                          +    acomp_device.pos_ch = ACOMP_CHANNEL_ADC_CHANNEL3; /*from gpio11 adc func*/
                          +    acomp_device.neg_ch = ACOMP_CHANNEL_0P375VBAT;
                          +    acomp_device.pos_hysteresis_vol = ACOMP_HYSTERESIS_VOLT_50MV;
                          +    acomp_device.neg_hysteresis_vol = ACOMP_HYSTERESIS_VOLT_50MV;
                          +    acomp_init(&acomp_device);
                          +    bflb_platform_delay_ms(50); /*delay for acomp*/
                          +
                          +    for (uint32_t i = 0; i < 30; i++) {
                          +        MSG("status:%d\r\n", acomp_get_result(&acomp_device));
                          +        bflb_platform_delay_ms(100);
                          +    }
                          +
                          +    MSG("acomp wake up case,enter hbn0 mode\r\n");
                          +    bflb_platform_delay_ms(50);
                          +
                          +    /** cpu will wakeup when acomp status change
                          +    * please note that if you set gpio9-gpio12 with GPIO_FUN_WAKEUP,it will also wakeup this level
                          +    * rtc can wakeup this level when sleep time do not equal 0
                          +    **/
                          +    pm_hbn_mode_enter(PM_HBN_LEVEL_0, 0);
                          +
                          +    return 0;
                          +}
                          +
                          +int hbn1_enter(int argc, char *argv[])
                          +{
                          +    int second = 0;
                          +
                          +    if (argc == 2) {
                          +        second = atoi(argv[1]);
                          +    } else {
                          +        second = 1;
                          +    }
                          +
                          +    MSG("rtc wake up case,enter hbn1 mode\r\n");
                          +    bflb_platform_delay_ms(50);
                          +    /** cpu will wakeup when rtc sleep time timeout
                          +    * please note that if you set gpio9-gpio12 with GPIO_FUN_WAKEUP,it will also wakeup this level
                          +    **/
                          +    pm_hbn_mode_enter(PM_HBN_LEVEL_1, second);
                          +
                          +    return 0;
                          +}
                          +
                          +int hbn2_enter(int argc, char *argv[])
                          +{
                          +    MSG("gpio wake up case,enter hbn2 mode\r\n");
                          +    bflb_platform_delay_ms(50);
                          +
                          +    /*cpu will wakeup when you set gpio9-gpio12 with GPIO_FUN_WAKEUP
                          +    * rtc can not wakeup level2
                          +    **/
                          +    pm_hbn_mode_enter(PM_HBN_LEVEL_2, 0);
                          +
                          +    return 0;
                          +}
                          +
                          +
                          +
                            +
                          • 注册进入 hbn0、hbn1、hbn2 的命令

                          • +
                          +
                          +
                          +
                          +

                          4.4. 编译和烧录

                          +
                            +
                          • CDK 编译

                            +
                            +

                            暂无,用户可以自己添加

                            +
                            +
                          • +
                          • 命令行编译

                          • +
                          +
                          1
                          +2
                          +3
                           $ cd <sdk_path>/bl_mcu_sdk
                          + $ make BOARD=bl706_lp APP=pds_mode_wakeup
                          + $ make BOARD=bl706_lp APP=hbn_mode_wakeup
                          +
                          +
                          + +
                          +
                          +

                          4.5. 实验现象

                          +
                            +
                          • 首先唤醒脚唤醒方式默认均为下降沿唤醒,所以需要将 GPIO6、GPIO10、GPIO12 引脚外接电阻到 3.3V。

                          • +
                          • acomp 变化电压阈值在 1.2375V,所以需要使用滑动电阻器,调整到 1.2375V(0.375VBAT)后再使用。

                          • +
                          • 打开终端,并按下 TAB 键可以列出命令。

                          • +
                          • 输入需要执行命令回车即可运行。

                          • +
                          +

                          PDS 模式

                          +
                          + +
                          +

                          HBN 模式

                          +
                          + +
                          +

                          详细测试结果见 BL702/704/706 数据手册 page 28

                          +
                          +../../_images/powerTable.png
                          diff --git a/docs/development_guide/build/html/samples/advance samples/shell_demo.html b/docs/development_guide/build/html/samples/advance samples/shell_demo.html index f6a75dbd..05e372f9 100644 --- a/docs/development_guide/build/html/samples/advance samples/shell_demo.html +++ b/docs/development_guide/build/html/samples/advance samples/shell_demo.html @@ -39,8 +39,8 @@ - - + + @@ -119,6 +119,7 @@
                        • 8. I2S 示例
                        • 9. ADC 示例
                        • 10. TIMER 示例
                        • +
                        • 11. XIP FLASH 示例

                        进阶例程

                      • -
                      • 2. Fatfs 文件系统读写
                      • +
                      • 2. FatFs 文件系统读写(SD 卡)
                      • 3. USB Device 应用
                      • -
                      • 4. LowPower 低功耗评估
                      • +
                      • 4. Power Management
                      • 5. BOOT2 IAP
                      • 6. BLE 客户端和服务端互连
                      • 7. EMAC 以太网应用
                      • @@ -445,7 +446,7 @@
                      1
                       2
                       $ cd <sdk_path>/bl_mcu_sdk
                      - $ make BOARD=bl706_iot APP=shell SUPPORT_SHELL=y
                      + $ make BOARD=bl706_iot APP=shell
                       
                        @@ -469,8 +470,8 @@