From 926235b9491727f4443ea477dfac19ee4a015f9d Mon Sep 17 00:00:00 2001 From: jzlv Date: Tue, 27 Dec 2022 19:33:57 +0800 Subject: [PATCH] [doc] update rst --- .../source/api_reference/components/bflog.rst | 483 ++++++++++++++++-- docs/source/api_reference/peripherals/dac.rst | 18 +- .../api_reference/peripherals/doxygen.png | Bin 0 -> 14910 bytes .../api_reference/peripherals/index.rst | 10 +- docs/source/conf.py | 74 +-- docs/source/get_started/cmake.rst | 2 +- docs/source/get_started/devcube.rst | 6 +- docs/source/get_started/eclipse.rst | 2 +- docs/source/get_started/flash_prog.rst | 84 +++ docs/source/get_started/img/repo.png | Bin 0 -> 34714 bytes docs/source/get_started/index.rst | 2 +- docs/source/get_started/linux_wsl.rst | 22 +- docs/source/get_started/repo.rst | 39 ++ docs/source/get_started/windows_cmd.rst | 17 +- docs/source/index.rst | 8 +- 15 files changed, 663 insertions(+), 104 deletions(-) create mode 100644 docs/source/api_reference/peripherals/doxygen.png create mode 100644 docs/source/get_started/flash_prog.rst create mode 100644 docs/source/get_started/img/repo.png create mode 100644 docs/source/get_started/repo.rst diff --git a/docs/source/api_reference/components/bflog.rst b/docs/source/api_reference/components/bflog.rst index 58b043af..5297eb8f 100644 --- a/docs/source/api_reference/components/bflog.rst +++ b/docs/source/api_reference/components/bflog.rst @@ -7,12 +7,13 @@ BFLOG - BFLOG 是一个移植简单,功能多样的多线程日志记录库 - 具有同步异步两种工作模式,异步模式如果缓冲区溢出会将最早的一条记录完整删除 - 总体三部分、记录器、定向输出、格式化器 -- 一个记录器可多重定向输出,可同时输出到缓冲区、IO外设、文件、文件大小划分、文件时间划分 +- 一个记录器可多重定向输出,可同时输出到缓冲区、IO外设、文件、文件大小划分、文件时间划分 - 定向到文件输出,支持设定保留数量,支持按文件大小划分,支持按时间划分 -- 每个定向输出可单独设定格式化器,输出等级,输出方式,颜色 +- 每个定向输出可单独设定格式化器、输出等级、TAG标签过滤、输出方式、颜色 - 格式化器支持简单格式、用户自定义格式、YAML格式(实现中)、CSV格式(规划中) -- 六级日志等级控制,FATAL、ERROR、WARNING、INFO、DEBUG、TRACE +- 六级日志等级控制, FATAL、ERROR、WARNING、INFO、DEBUG、TRACE - 支持等级、TAG标签、函数、行数、文件名、TICK数、TIME、线程信息输出 +- 支持等级、TAG标签过滤功能 - 可对不需要的等级、功能、标签进行裁剪,缩小代码体积 .. figure:: img/bflog_log.png @@ -25,51 +26,457 @@ BFLOG 如果需要配置BFLOG的相关功能需要在对应的工程目录下 `proj.conf` 文件中添加对应的代码,举例如下: -.. note:: BFLOG 默认依赖 VLIBC 需要先启用 VLIBC。 - 如果需要支持文件输出,还需要启用Fatfs和 VLIBC的Fatfs接口支持 - - -以下是一个不支持BFLOG文件输出的 `proj.conf` 配置 +以下是一个不支持文件输出的 `proj.conf` 配置 .. code-block:: cmake :linenos: - # 使能VLIBC - set(CONFIG_VLIBC 1) - # 使能 BFLOG set(CONFIG_BFLOG 1) + # 使能参数检查, 可不开启 + set(CONFIG_BFLOG_DEBUG 1) - -以下是一个支持BFLOG文件输出的 `proj.conf` 配置 - -.. code-block:: cmake - :linenos: - - # 使能VLIBC - set(CONFIG_VLIBC 1) - # 使能VLIBC FATFS 文件接口 - set(CONFIG_VLIBC_FATFS 1) - - # 使能 BFLOG - set(CONFIG_BFLOG 1) - - # 使能 Fatfs - set(CONFIG_FATFS 1) - - # 使能 BSP_COMMON 文件夹中驱动支持 - set(CONFIG_BSP_COMMON 1) - - # 使能 SD卡 - set(CONFIG_BSP_SDH_SDCARD 1) - - # 使能 Fatfs 的 SD 卡接口 - set(CONFIG_FATFS_SDH_SDCARD 1) - -此外在 `proj.conf` 配置中添加以下配置可以使用用户的 **bflog_user.h** 配置文件,配置文件模板为 **bflog_default.h** +此外在 `proj.conf` 配置中添加以下配置可以使用用户的 **bflog_user.h** 配置文件,配置文件默认为 **bflog_default.h** .. code-block:: cmake :linenos: # 使能 BFLOG_USER 配置文件 set(CONFIG_BFLOG_USER 1) + +Macros +------------ + +BFLOG_CSI +^^^^^^^^^^^^^^^^^^^^ + +Control Sequence Introducer +用于控制终端 + +.. code-block:: c + :linenos: + + #define BFLOG_CSI_START "\033[" + #define BFLOG_CSI_CUU "A" + #define BFLOG_CSI_CUD "B" + #define BFLOG_CSI_CUF "C" + #define BFLOG_CSI_CUB "D" + #define BFLOG_CSI_CNL "E" + #define BFLOG_CSI_CPL "F" + #define BFLOG_CSI_CHA "G" + #define BFLOG_CSI_CUP "H" + #define BFLOG_CSI_ED "J" + #define BFLOG_CSI_EL "K" + #define BFLOG_CSI_SU "S" + #define BFLOG_CSI_SD "T" + #define BFLOG_CSI_SGR "m" + +BFLOG_SGR +^^^^^^^^^^^^^^^^^^^^ + +Select Graphic Rendition +用于文字图形 + +.. code-block:: c + :linenos: + + #define BFLOG_SGR_RESET "0" + #define BFLOG_SGR_BOLD "1" + #define BFLOG_SGR_FAINT "2" + #define BFLOG_SGR_ITALICS "3" + #define BFLOG_SGR_UNDERLINE "4" + #define BFLOG_SGR_BLINKS "5" + #define BFLOG_SGR_BLINKR "6" + #define BFLOG_SGR_REVERSE "7" + #define BFLOG_SGR_HIDE "8" + #define BFLOG_SGR_STRIKE "9" + #define BFLOG_SGR_NORMAL "22" + #define BFLOG_SGR_FG_BLACK "30" + #define BFLOG_SGR_FG_RED "31" + #define BFLOG_SGR_FG_GREEN "32" + #define BFLOG_SGR_FG_YELLOW "33" + #define BFLOG_SGR_FG_BLUE "34" + #define BFLOG_SGR_FG_MAGENTA "35" + #define BFLOG_SGR_FG_CYAN "36" + #define BFLOG_SGR_FG_WHITE "37" + #define BFLOG_SGR_BG_BLACK "40" + #define BFLOG_SGR_BG_RED "41" + #define BFLOG_SGR_BG_GREEN "42" + #define BFLOG_SGR_BG_YELLOW "43" + #define BFLOG_SGR_BG_BLUE "44" + #define BFLOG_SGR_BG_MAGENTA "45" + #define BFLOG_SGR_BG_CYAN "46" + #define BFLOG_SGR_BG_WHITE "47" + +BFLOG_COLOR +^^^^^^^^^^^^^^^^^^^^ + +一系列颜色用于配置使用 + +.. code-block:: c + :linenos: + + #define BFLOG_COLOR_START BFLOG_CSI_START + #define BFLOG_COLOR_END BFLOG_CSI_SGR + #define BFLOG_CLOLR_SEP ";" + #define BFLOG_COLOR_DEFAULT + #define BFLOG_COLOR_RESET BFLOG_SGR_RESET BFLOG_CLOLR_SEP + #define BFLOG_COLOR_FG_NONE + #define BFLOG_COLOR_FG_BLACK BFLOG_SGR_FG_BLACK BFLOG_CLOLR_SEP + #define BFLOG_COLOR_FG_RED BFLOG_SGR_FG_RED BFLOG_CLOLR_SEP + #define BFLOG_COLOR_FG_GREEN BFLOG_SGR_FG_GREEN BFLOG_CLOLR_SEP + #define BFLOG_COLOR_FG_YELLOW BFLOG_SGR_FG_YELLOW BFLOG_CLOLR_SEP + #define BFLOG_COLOR_FG_BLUE BFLOG_SGR_FG_BLUE BFLOG_CLOLR_SEP + #define BFLOG_COLOR_FG_MAGENTA BFLOG_SGR_FG_MAGENTA BFLOG_CLOLR_SEP + #define BFLOG_COLOR_FG_CYAN BFLOG_SGR_FG_CYAN BFLOG_CLOLR_SEP + #define BFLOG_COLOR_FG_WHITE BFLOG_SGR_FG_WHITE BFLOG_CLOLR_SEP + #define BFLOG_COLOR_BG_NONE + #define BFLOG_COLOR_BG_BLACK BFLOG_SGR_BG_BLACK BFLOG_CLOLR_SEP + #define BFLOG_COLOR_BG_RED BFLOG_SGR_BG_RED BFLOG_CLOLR_SEP + #define BFLOG_COLOR_BG_GREEN BFLOG_SGR_BG_GREEN BFLOG_CLOLR_SEP + #define BFLOG_COLOR_BG_YELLOW BFLOG_SGR_BG_YELLOW BFLOG_CLOLR_SEP + #define BFLOG_COLOR_BG_BLUE BFLOG_SGR_BG_BLUE BFLOG_CLOLR_SEP + #define BFLOG_COLOR_BG_MAGENTA BFLOG_SGR_BG_MAGENTA BFLOG_CLOLR_SEP + #define BFLOG_COLOR_BG_CYAN BFLOG_SGR_BG_CYAN BFLOG_CLOLR_SEP + #define BFLOG_COLOR_BG_WHITE BFLOG_SGR_BG_WHITE BFLOG_CLOLR_SEP + +BFLOG_COLOR_CONTROL +^^^^^^^^^^^^^^^^^^^^ + +默认配置的各等级LOG颜色 + +.. code-block:: c + :linenos: + + #ifndef BFLOG_COLOR_FATAL + #define BFLOG_COLOR_FATAL BFLOG_COLOR_FG_MAGENTA BFLOG_COLOR_BG_NONE BFLOG_SGR_BLINKS + #endif + + #ifndef BFLOG_COLOR_ERROR + #define BFLOG_COLOR_ERROR BFLOG_COLOR_FG_RED BFLOG_COLOR_BG_NONE BFLOG_SGR_NORMAL + #endif + + #ifndef BFLOG_COLOR_WARN + #define BFLOG_COLOR_WARN BFLOG_COLOR_FG_YELLOW BFLOG_COLOR_BG_NONE BFLOG_SGR_NORMAL + #endif + + #ifndef BFLOG_COLOR_INFO + #define BFLOG_COLOR_INFO BFLOG_COLOR_FG_NONE BFLOG_COLOR_BG_NONE BFLOG_SGR_RESET + #endif + + #ifndef BFLOG_COLOR_DEBUG + #define BFLOG_COLOR_DEBUG BFLOG_COLOR_FG_WHITE BFLOG_COLOR_BG_NONE BFLOG_SGR_NORMAL + #endif + + #ifndef BFLOG_COLOR_TRACE + #define BFLOG_COLOR_TRACE BFLOG_COLOR_FG_WHITE BFLOG_COLOR_BG_NONE BFLOG_SGR_FAINT + #endif + +BFLOG_LEVEL_STRING +^^^^^^^^^^^^^^^^^^^^ + +默认配置的各等级提示信息 + +.. code-block:: c + :linenos: + + #ifndef BFLOG_LEVEL_FATAL_STRING + #define BFLOG_LEVEL_FATAL_STRING "FATL" + #endif + + #ifndef BFLOG_LEVEL_ERROR_STRING + #define BFLOG_LEVEL_ERROR_STRING "ERRO" + #endif + + #ifndef BFLOG_LEVEL_WARN_STRING + #define BFLOG_LEVEL_WARN_STRING "WARN" + #endif + + #ifndef BFLOG_LEVEL_INFO_STRING + #define BFLOG_LEVEL_INFO_STRING "INFO" + #endif + + #ifndef BFLOG_LEVEL_DEBUG_STRING + #define BFLOG_LEVEL_DEBUG_STRING "DBUG" + #endif + + #ifndef BFLOG_LEVEL_TRACE_STRING + #define BFLOG_LEVEL_TRACE_STRING "TRAC" + #endif + +BFLOG_LEVEL +^^^^^^^^^^^^^^^^^^^^ + +用于配置 recorder 和 direct 的 LOG等级 + +.. code-block:: c + :linenos: + + #define BFLOG_LEVEL_FATAL 0x00 /*!< level fatal, create a panic */ + #define BFLOG_LEVEL_ERROR 0x01 /*!< level error */ + #define BFLOG_LEVEL_WARN 0x02 /*!< level warning */ + #define BFLOG_LEVEL_INFO 0x03 /*!< level information */ + #define BFLOG_LEVEL_DEBUG 0x04 /*!< level debug */ + #define BFLOG_LEVEL_TRACE 0x05 /*!< level trace information */ + + +BFLOG_FLAG +^^^^^^^^^^^^^^^^^^^^ + +用于配置 recorder 和 direct 的功能 + +.. code-block:: c + :linenos: + + #define BFLOG_FLAG_LEVEL ((uint8_t)0x01) /*!< supported print level */ + #define BFLOG_FLAG_TAG ((uint8_t)0x02) /*!< supported record tag */ + #define BFLOG_FLAG_FUNC ((uint8_t)0x04) /*!< supported record function */ + #define BFLOG_FLAG_LINE ((uint8_t)0x08) /*!< supported record line */ + #define BFLOG_FLAG_FILE ((uint8_t)0x10) /*!< supported record file */ + #define BFLOG_FLAG_CLK ((uint8_t)0x20) /*!< supported record clock */ + #define BFLOG_FLAG_TIME ((uint8_t)0x40) /*!< supported record time */ + #define BFLOG_FLAG_THREAD ((uint8_t)0x80) /*!< supported record thread */ + + +BFLOG_MODE +^^^^^^^^^^^^^^^^^^^^ + +用于配置 recorder 的模式 + +.. code-block:: c + :linenos: + + #define BFLOG_MODE_SYNC ((uint8_t)0x00) + #define BFLOG_MODE_ASYNC ((uint8_t)0x01) + +BFLOG_COMMAND +^^^^^^^^^^^^^^^^^^^^ + +用于 bflog_control 第二个参数 + +.. code-block:: c + :linenos: + + #define BFLOG_CMD_FLAG ((uint32_t)0x01) + #define BFLOG_CMD_LEVEL ((uint32_t)0x02) + #define BFLOG_CMD_QUEUE_POOL ((uint32_t)0x03) + #define BFLOG_CMD_QUEUE_SIZE ((uint32_t)0x04) + #define BFLOG_CMD_QUEUE_RST ((uint32_t)0x05) + #define BFLOG_CMD_ENTER_CRITICAL ((uint32_t)0x06) + #define BFLOG_CMD_EXIT_CRITICAL ((uint32_t)0x07) + #define BFLOG_CMD_FLUSH_NOTICE ((uint32_t)0x08) + #define BFLOG_CMD_MODE ((uint32_t)0x09) + +BFLOG_DIRECT_COMMAND +^^^^^^^^^^^^^^^^^^^^ + +用于 bflog_direct_control 第二个参数 + +.. code-block:: c + :linenos: + + #define BFLOG_DIRECT_CMD_ILLEGAL ((uint32_t)0x00) + #define BFLOG_DIRECT_CMD_LEVEL ((uint32_t)0x02) + #define BFLOG_DIRECT_CMD_LOCK ((uint32_t)0x06) + #define BFLOG_DIRECT_CMD_UNLOCK ((uint32_t)0x07) + #define BFLOG_DIRECT_CMD_COLOR ((uint32_t)0x0A) + +BFLOG_DIRECT_COMMAND +^^^^^^^^^^^^^^^^^^^^ + +用于 bflog_direct_create 第二个参数 + +.. code-block:: c + :linenos: + + #define BFLOG_DIRECT_TYPE_ILLEGAL ((uint8_t)0x00) + #define BFLOG_DIRECT_TYPE_BUFFER ((uint8_t)0x01) + #define BFLOG_DIRECT_TYPE_STREAM ((uint8_t)0x02) + #define BFLOG_DIRECT_TYPE_FILE ((uint8_t)0x03) + #define BFLOG_DIRECT_TYPE_FILE_TIME ((uint8_t)0x04) + #define BFLOG_DIRECT_TYPE_FILE_SIZE ((uint8_t)0x05) + +BFLOG_DIRECT_COLOR +^^^^^^^^^^^^^^^^^^^^ + +用于 bflog_direct_create 第三个参数 + +.. code-block:: c + :linenos: + + #define BFLOG_DIRECT_COLOR_DISABLE ((uint8_t)0) + #define BFLOG_DIRECT_COLOR_ENABLE ((uint8_t)1) + +BFLOG_LAYOUT_TYPE +^^^^^^^^^^^^^^^^^^^^ + +用于 bflog_layout_create 第二个参数 + +.. code-block:: c + :linenos: + + #define BFLOG_LAYOUT_TYPE_SIMPLE ((uint8_t)0) + #define BFLOG_LAYOUT_TYPE_FORMAT ((uint8_t)1) + #define BFLOG_LAYOUT_TYPE_YAML ((uint8_t)2) + +Port Functions +------------ + +bflog_clock +^^^^^^^^^^^^^^^^^^^^ + +获取当前cpu时钟数 + +.. code-block:: c + :linenos: + + uint64_t bflog_clock(void); + +bflog_time +^^^^^^^^^^^^^^^^^^^^ + +获取当前UTC时间戳 + +.. code-block:: c + :linenos: + + uint32_t bflog_time(void); + +bflog_thread +^^^^^^^^^^^^^^^^^^^^ + +获取当前线程名称 + +.. code-block:: c + :linenos: + + char *bflog_thread(void); + +Global Functions +------------ + +bflog_global_filter +^^^^^^^^^^^^^^^^^^^^ + +用于对标签过滤器进行全局的开关,会影响所有的recorder和direct + +.. code-block:: c + :linenos: + + int bflog_global_filter(void *tag_string, uint8_t enable); + +.. list-table:: + :widths: 10 10 + :header-rows: 1 + + * - parameter + - description + * - tag_string + - 标签字符串的指针 + * - enable + - 是否使能 + + +Recorder Functions +------------ + +recorder负责收集日志, 具有illegal、ready、running、suspend四种状态 +running状态可以收集日志, ready、suspend状态可以对其进行配置 +除level配置操作外, 其他配置操作必须在ready、suspend下 + +bflog_create +^^^^^^^^^^^^^^^^^^^^ + +创建一个recorder, 需要定义一个bflog_t结构体并将其指针传入,定义一块内存数组用于换冲 +成功返回0,失败返回-1 + +.. code-block:: c + :linenos: + + int bflog_create(bflog_t *log, void *pool, uint16_t size, uint8_t mode); + +.. list-table:: + :widths: 10 10 + :header-rows: 1 + + * - parameter + - description + * - log + - recorder 指针 + * - pool + - 用于缓冲的数组 + * - size + - 用户缓冲的数组大小 + * - mode + - BFLOG_MODE + +bflog_delete +^^^^^^^^^^^^^^^^^^^^ + +删除一个recorder +处于ready、suspend +线程安全的 +成功返回0,失败返回-1 + +.. code-block:: c + :linenos: + + int bflog_delete(bflog_t *log); + +.. list-table:: + :widths: 10 10 + :header-rows: 1 + + * - parameter + - description + * - log + - recorder 指针 + +bflog_append +^^^^^^^^^^^^^^^^^^^^ + +将一个direct添加到此recorder +处于ready、suspend +线程安全的 +成功返回0,失败返回-1 + +.. code-block:: c + :linenos: + + int bflog_append(bflog_t *log, bflog_direct_t *direct); + +.. list-table:: + :widths: 10 10 + :header-rows: 1 + + * - parameter + - description + * - log + - recorder 指针 + * - direct + - direct 指针 + +bflog_remove +^^^^^^^^^^^^^^^^^^^^ + +将一个direct从recorder移除 +处于ready、suspend +线程安全的 +成功返回0,失败返回-1 + +.. code-block:: c + :linenos: + + int bflog_remove(bflog_t *log, bflog_direct_t *direct); + +.. list-table:: + :widths: 10 10 + :header-rows: 1 + + * - parameter + - description + * - log + - recorder 指针 + * - direct + - direct 指针 + diff --git a/docs/source/api_reference/peripherals/dac.rst b/docs/source/api_reference/peripherals/dac.rst index 8fe73be4..97df5bf6 100644 --- a/docs/source/api_reference/peripherals/dac.rst +++ b/docs/source/api_reference/peripherals/dac.rst @@ -4,18 +4,18 @@ DAC Macros ------------ -dac sampling frequence +dac clock div ^^^^^^^^^^^^^^^^^^^^^^^^^ -dac 采样频率可以选择 32K、16K、8K,512K 只有 dma 模式下才可以使用。 +dac 分频,只有 DMA 模式下可以使用 1 分频。 .. code-block:: c :linenos: - #define DAC_SAMPLING_FREQ_32K 0 - #define DAC_SAMPLING_FREQ_16K 1 - #define DAC_SAMPLING_FREQ_8K 3 - #define DAC_SAMPLING_FREQ_512K 4 + #define DAC_CLK_DIV_16 0 + #define DAC_CLK_DIV_32 1 + #define DAC_CLK_DIV_64 3 + #define DAC_CLK_DIV_1 4 dac channel ^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -44,7 +44,7 @@ bflb_dac_init .. code-block:: c :linenos: - void bflb_dac_init(struct bflb_device_s *dev, uint8_t frequence); + void bflb_dac_init(struct bflb_device_s *dev, uint8_t clk_div); .. list-table:: :widths: 10 10 @@ -54,8 +54,8 @@ bflb_dac_init - description * - dev - 设备句柄 - * - frequence - - 采样率 + * - clk_div + - 分频值 bflb_dac_deinit ^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/source/api_reference/peripherals/doxygen.png b/docs/source/api_reference/peripherals/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7b62e38c346a60ca88e4ed116a157ef72711d8 GIT binary patch literal 14910 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%0D~huLODfQb_4!kxsg74ca#vc%8k{FTro-*+to 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 literal 0 HcmV?d00001 diff --git a/docs/source/api_reference/peripherals/index.rst b/docs/source/api_reference/peripherals/index.rst index c239b738..e674063e 100644 --- a/docs/source/api_reference/peripherals/index.rst +++ b/docs/source/api_reference/peripherals/index.rst @@ -5,7 +5,7 @@ Peripherals 简介 --------- -BL MCU SDK 中外设驱动分为两类: **LHAL** 和 **SOC** ,前者对通用外设进行了统一的封装,不同芯片使用同一套接口,方便用户使用和移植到其他平台。后者则是每个芯片独有且特殊的部分,比如 GLB、HBN、PDS、AON 等等。 +BouffaloSDK 中外设驱动分为两类: **LHAL** 和 **SOC** ,前者对通用外设进行了统一的封装,不同芯片使用同一套接口,方便用户使用和移植到其他平台。后者则是每个芯片独有且特殊的部分,比如 GLB、HBN、PDS、AON 等等。 下面主要列出 **LHAL** 相关 API 的使用。 @@ -22,7 +22,6 @@ BL MCU SDK 中外设驱动分为两类: **LHAL** 和 **SOC** ,前者对通 uint8_t sub_idx; uint8_t dev_type; void *user_data; - bflb_dlist_t list; }; .. list-table:: @@ -202,6 +201,13 @@ API 支持情况 API 列表 --------------- +除了使用网页版查看 API 以外, 还提供了 **LHAL Doxygen** 版本,离线生成文档。 Doxyfile 文件在 ``drivers/lhal`` 目录下。 + +使用 Doxywizard 导入并运行即可。 + +.. figure:: doxygen.png + :alt: + .. toctree:: :maxdepth: 1 diff --git a/docs/source/conf.py b/docs/source/conf.py index 632c807b..9e35d51e 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,37 +1,37 @@ -# Configuration file for the Sphinx documentation builder. - -# -- Project information - -project = 'BL_MCU_SDK' -copyright = '2022, Bouffalolab Team' -author = 'Bouffalolab Team' - -release = '2.0' -version = '2.0.0' - -# -- General configuration - -extensions = [ - 'sphinx.ext.duration', - 'sphinx.ext.doctest', - 'sphinx.ext.autodoc', - 'sphinx.ext.autosummary', - 'sphinx.ext.intersphinx', - 'recommonmark', - 'sphinx_markdown_tables' -] - -intersphinx_mapping = { -# 'python': ('https://docs.python.org/3/', None), -# 'sphinx': ('https://www.sphinx-doc.org/en/master/', None), -} -intersphinx_disabled_domains = ['std'] - -templates_path = ['_templates'] - -# -- Options for HTML output - -html_theme = 'sphinx_rtd_theme' - -# -- Options for EPUB output -epub_show_urls = 'footnote' +# Configuration file for the Sphinx documentation builder. + +# -- Project information + +project = 'BouffaloSDK' +copyright = '2022, Bouffalolab Team' +author = 'Bouffalolab Team' + +release = '2.0' +version = '2.0.0' + +# -- General configuration + +extensions = [ + 'sphinx.ext.duration', + 'sphinx.ext.doctest', + 'sphinx.ext.autodoc', + 'sphinx.ext.autosummary', + 'sphinx.ext.intersphinx', + 'recommonmark', + 'sphinx_markdown_tables' +] + +intersphinx_mapping = { +# 'python': ('https://docs.python.org/3/', None), +# 'sphinx': ('https://www.sphinx-doc.org/en/master/', None), +} +intersphinx_disabled_domains = ['std'] + +templates_path = ['_templates'] + +# -- Options for HTML output + +html_theme = 'sphinx_rtd_theme' + +# -- Options for EPUB output +epub_show_urls = 'footnote' diff --git a/docs/source/get_started/cmake.rst b/docs/source/get_started/cmake.rst index 6e7e8e48..3454588b 100644 --- a/docs/source/get_started/cmake.rst +++ b/docs/source/get_started/cmake.rst @@ -1,7 +1,7 @@ CMake 框架的使用 ================== -本节主要介绍如何使用 CMake 框架。bl_mcu_sdk 中为用户封装了以下函数接口,基本满足常用场景的使用。 +本节主要介绍如何使用 CMake 框架。BouffaloSDK 中为用户封装了以下函数接口,基本满足常用场景的使用。 .. list-table:: :widths: 30 30 diff --git a/docs/source/get_started/devcube.rst b/docs/source/get_started/devcube.rst index 7e16cd70..10a2ef88 100644 --- a/docs/source/get_started/devcube.rst +++ b/docs/source/get_started/devcube.rst @@ -3,9 +3,11 @@ Bouffalo Lab DevCube 的使用 ============================= -本文档将简要介绍一下如何使用 Bouffalo Lab DevCube 集成开发工具烧写代码. +.. caution:: BouffaloSDK 不再使用此工具,使用 SDK 自带的命令行烧录工具 -Bouffalo Lab Dev Cube 工具可以从博流智能开发者社区下载适合您操作系统的版本,下载地址:`https://dev.bouffalolab.com/download `_ 。没有注册开发者账号的用户,可以点击开发者入口,使用 ``guest`` 用户进入。 +本文档将简要介绍一下如何使用 Bouffalo Lab DevCube 集成开发工具烧写代码。 + +Bouffalo Lab Dev Cube 工具可以从博流智能开发者社区下载适合您操作系统的版本,下载地址: `https://dev.bouffalolab.com/download `_ 。没有注册开发者账号的用户,可以点击开发者入口,使用 ``guest`` 用户进入。 下载完成后,解压后即可使用。 diff --git a/docs/source/get_started/eclipse.rst b/docs/source/get_started/eclipse.rst index 4a39557b..417a1978 100644 --- a/docs/source/get_started/eclipse.rst +++ b/docs/source/get_started/eclipse.rst @@ -13,7 +13,7 @@ Build and Debug with Eclipse .. figure:: img/eclipse1.png :alt: -- 其余需要的环境参考 :ref:`windows_cmd` +- 其余步骤参考 :ref:`windows_cmd` - 解压 Eclipse 并双击打开 `Eclipse.exe` diff --git a/docs/source/get_started/flash_prog.rst b/docs/source/get_started/flash_prog.rst new file mode 100644 index 00000000..cc74d328 --- /dev/null +++ b/docs/source/get_started/flash_prog.rst @@ -0,0 +1,84 @@ +.. _flash_prog_cfg: + +Flash prog cfg.ini 的使用 +================================= + +在用户执行 ``make flash`` 会调用 **bouffalo_flash_cube** 下的可执行文件,并根据 **Flash prog cfg.ini** 进行烧录, +本节主要介绍一下 **Flash prog cfg.ini** 的语法。 + +常规 MCU 使用(不使用无线功能) +--------------------------------- + +.. code-block:: ini + :linenos: + + [cfg] + # 0: no erase, 1:programmed section erase, 2: chip erase + erase = 1 + # skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separated + skip_mode = 0x0, 0x0 + # 0: not use isp mode, #1: isp mode + boot2_isp_mode = 0 + + [firmware] + filedir = ./build/build_out/xxx*_$(CHIPNAME).bin + address = 0x0000 + + +- **cfg** 表示烧录时的一些配置,正常不需要改动 +- **firmware** 要烧录的应用固件,必须使用 **firmware** 名称。 + + - **filedir** 表示应用固件所在相对路径,正常来说是编译完后放在 `build/build_out` 目录。 ``_$(CHIPNAME).bin`` 是必须要的后缀,用于区分不同芯片。 ``xxx`` 表示应用固件名称,与 `CMakeLists.txt` 中 `project(xxx)` 中名称一致。 ``*`` 表示正则匹配,可用可不用。 + - **address** 必须使用 0 地址 + + +常规 IOT 使用(使用无线功能) +--------------------------------- + +.. code-block:: ini + :linenos: + + [cfg] + # 0: no erase, 1:programmed section erase, 2: chip erase + erase = 1 + # skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separated + skip_mode = 0x0, 0x0 + # 0: not use isp mode, #1: isp mode + boot2_isp_mode = 0 + + [firmware] + filedir = ./build/build_out/xxx*_$(CHIPNAME).bin + address = 0x10000 + + [boot2] + filedir = ./build/build_out/boot2_*.bin + address = 0x000000 + + [partition] + filedir = ./build/build_out/partition*.bin + address = 0xE000 + + [mfg] + filedir = ./build/build_out/mfg*.bin + address = 0x210000 + +- **cfg** 表示烧录时的一些配置,正常不需要改动 +- **firmware** 要烧录的应用固件,必须使用 **firmware** 名称。 + + - **filedir** 表示应用固件所在相对路径,正常来说是编译完后放在 `build/build_out` 目录。 ``_$(CHIPNAME).bin`` 是必须要的后缀,用于区分不同芯片。 ``xxx`` 表示应用固件名称,与 `CMakeLists.txt` 中 `project(xxx)` 中名称一致。 + - **address** 由 `partition_xxx.toml` 指定 + +- **boot2** 要烧录的 boot2 固件,必须使用 **boot2** 名称。 + + - **filedir** 表示 boot2 固件所在相对路径,正常来说是编译完后放在 `build/build_out` 目录。 **自动从 bsp/board/board_name/config 目录拷贝**。 + - **address** 必须使用 0 地址 + +- **partition** 要烧录的 partition 固件,必须使用 **partition** 名称。 + + - **filedir** 表示 partition 固件所在相对路径,正常来说是编译完后放在 `build/build_out` 目录。 **自动从 bsp/board/board_name/config 目录 partition_xxx.toml 转换成 bin 文件并拷贝**。 + - **address** 由 `partition_xxx.toml` 指定 + +- **mfg** 要烧录的 mfg 固件,必须使用 **mfg** 名称。 + + - **filedir** 表示 mfg 固件所在相对路径,正常来说是编译完后放在 `build/build_out` 目录。 **自动从 bsp/board/board_name/config 目录拷贝**。 + - **address** 由 `partition_xxx.toml` 指定 diff --git a/docs/source/get_started/img/repo.png b/docs/source/get_started/img/repo.png new file mode 100644 index 0000000000000000000000000000000000000000..069bd896bf66e2685297e92306c116592fdc1bc0 GIT binary patch literal 34714 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 literal 0 HcmV?d00001 diff --git a/docs/source/get_started/index.rst b/docs/source/get_started/index.rst index 626c3a7b..62440999 100644 --- a/docs/source/get_started/index.rst +++ b/docs/source/get_started/index.rst @@ -2,7 +2,7 @@ 开发环境搭建 ======================= -BL MCU SDK 提供了以下几种开发环境,包含安装、编译、烧录和调试,选择一种适合你的即可。 +BouffaloSDK 提供了以下几种开发环境,包含环境搭建、编译、烧录和调试,选择一种适合你的即可。 .. toctree:: :maxdepth: 1 diff --git a/docs/source/get_started/linux_wsl.rst b/docs/source/get_started/linux_wsl.rst index 6816b14e..07bb433c 100644 --- a/docs/source/get_started/linux_wsl.rst +++ b/docs/source/get_started/linux_wsl.rst @@ -68,7 +68,7 @@ Build with Linux or WSL gcc version 10.2.0 (Xuantie-900 elf newlib gcc Toolchain V2.2.5 B-20220323) -- 在 linux 中,有严格的权限限制,通常一个用户对应一个权限,所以如果提示下面信息,表示需要设置 cmake 权限。 +- 在 linux 中,有严格的权限限制,通常一个用户对应一个权限,所以如果提示下面信息,表示需要设置权限。因此,我们将使用到的工具都设置好权限即可 .. figure:: img/cmake_error.png :align: center @@ -78,8 +78,10 @@ Build with Linux or WSL .. code-block:: bash :linenos: - $ cd bl_mcu_sdk - $ sudo chmod +x tools/cmake/bin/cmake + $ cd bouffalo_sdk + $ chmod 777 +x tools/cmake/bin/cmake + $ chmod 777 +x tools/bflb_tools/bflb_fw_post_proc/bflb_fw_post_proc + $ chmod 777 +x tools/bflb_tools/bouffalo_flash_cube/BLFlashCommand 编译 ------------- @@ -92,7 +94,7 @@ Build with Linux or WSL :linenos: $ cd examples/helloworld - $ make CHIP=chip_name BOARD=board_name ## chip_name 为芯片型号,可以填写 bl702、bl616、bl808、bl606p, board_name 为开发板名称,详见 bsp/board 目录 + $ make CHIP=chip_name BOARD=board_name ## chip_name 为芯片型号,可以填写 bl602、bl702、bl616、bl808、bl606p, board_name 为开发板名称,详见 bsp/board 目录 - 使用 ninja 编译 @@ -100,6 +102,14 @@ Build with Linux or WSL :linenos: $ cd examples/helloworld - $ make ninja CHIP=chip_name BOARD=board_name ## chip_name 为芯片型号,可以填写 bl702、bl616、bl808、bl606p, board_name 为开发板名称,详见 bsp/board 目录 + $ make ninja CHIP=chip_name BOARD=board_name ## chip_name 为芯片型号,可以填写 bl602、bl702、bl616、bl808、bl606p, board_name 为开发板名称,详见 bsp/board 目录 -.. note :: 如果使用 BL808 或者 BL606P,需要在上面基础上添加 CPU_ID=id ,id 可以为 m0 或者 d0 \ No newline at end of file +.. note :: 如果使用 BL808 或者 BL606P,需要在上面基础上添加 CPU_ID=id ,id 可以为 m0 或者 d0 + +- 烧录 + +.. code-block:: bash + :linenos: + + $ cd examples/helloworld + $ make flash CHIP=chip_name COMX=port_name ## port_name 为串口号名称,比如 linux 中/dev/ttyACMx,wsl 中对应使用 /dev/ttySx diff --git a/docs/source/get_started/repo.rst b/docs/source/get_started/repo.rst new file mode 100644 index 00000000..14197477 --- /dev/null +++ b/docs/source/get_started/repo.rst @@ -0,0 +1,39 @@ +Repo 的使用 +======================= + +Repo 是谷歌用 Python 脚本写的调用 git 的一个脚本,可以实现管理多个 git 库,简单的几行命令便可以拉取很多仓库的代码。 + +安装 +-------- + +- 下载 `repo `_ 。 + +- windows 下将 `repo.exe` 文件(在 win 目录中)所在的路径配置到系统环境变量。 + +.. figure:: img/repo.png + :alt: + +- Linux 下执行以下命令。 + +.. code-block:: bash + :linenos: + + cd repo/linux + chmod +x repo + mv repo /usr/bin/repo + +下载代码 +---------- + +- 获取 SDK (只包含 BL616/BL618 版本) + +.. code-block:: bash + :linenos: + + repo init -u https://gerrit.bouffalolab.com/bouffalo/manifest/bouffalo_sdk -b master -m bl616-public.xml + + +同步代码 +---------- + +后续只需要使用 ``repo sync`` 即可同步代码。 \ No newline at end of file diff --git a/docs/source/get_started/windows_cmd.rst b/docs/source/get_started/windows_cmd.rst index a67361ed..1371de2c 100644 --- a/docs/source/get_started/windows_cmd.rst +++ b/docs/source/get_started/windows_cmd.rst @@ -18,7 +18,8 @@ Build with Windows CMD $ cd d $ git clone git@gitee.com:bouffalolab/toolchain_gcc_t-head_windows.git -- 将 make、ninja、下载的 risc-v 工具链路径配置到系统环境变量中, 其中 make 和 ninja 工具位于 `bl_mcu_sdk/tools` 目录下。 +- 将 make、ninja、下载的 risc-v 工具链路径配置到系统环境变量中, 其中 make 和 ninja 工具位于 `bouffalo_sdk/tools` 目录下。 +- windows 11 配置完以后需要重启电脑才生效。 .. figure:: img/windows_path.png :alt: @@ -72,7 +73,7 @@ Build with Windows CMD :linenos: $ cd .\examples\helloworld\ - $ make CHIP=chip_name BOARD=board_name ## chip_name 为芯片型号,可以填写 bl702、bl616、bl808、bl606p, board_name 为开发板名称,详见 bsp/board 目录 + $ make CHIP=chip_name BOARD=board_name ## chip_name 为芯片型号,可以填写 bl602、bl702、bl616、bl808、bl606p, board_name 为开发板名称,详见 bsp/board 目录 - 使用 ninja 编译 @@ -80,6 +81,14 @@ Build with Windows CMD :linenos: $ cd .\examples\helloworld\ - $ make ninja CHIP=chip_name BOARD=board_name ## chip_name 为芯片型号,可以填写 bl702、bl616、bl808、bl606p, board_name 为开发板名称,详见 bsp/board 目录 + $ make ninja CHIP=chip_name BOARD=board_name ## chip_name 为芯片型号,可以填写 bl602、bl702、bl616、bl808、bl606p, board_name 为开发板名称,详见 bsp/board 目录 -.. note :: 如果使用 BL808 或者 BL606P,需要在上面基础上添加 CPU_ID=id ,id 可以为 m0 或者 d0 \ No newline at end of file +.. note :: 如果使用 BL808 或者 BL606P,需要在上面基础上添加 CPU_ID=id ,id 可以为 m0 或者 d0 + +- 烧录 + +.. code-block:: bash + :linenos: + + $ cd examples/helloworld + $ make flash CHIP=chip_name COMX=port_name ## port_name 为串口号名称,比如 COM5 diff --git a/docs/source/index.rst b/docs/source/index.rst index 109c4d6a..8f6dc7c2 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,21 +1,23 @@ -.. BL MCU SDK 使用指南 documentation master file, created by +.. BouffaloSDK 使用指南 documentation master file, created by sphinx-quickstart on Thu Nov 21 10:50:33 2019. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -BL MCU SDK 使用指南 +BouffaloSDK 使用指南 ====================================================== -欢迎来到 Bouffalo Lab BL_MCU_SDK 文档中心。 +欢迎来到 Bouffalo Lab BouffaloSDK 文档中心。 .. toctree:: :maxdepth: 1 :caption: 快速入门 get_started/index + get_started/flash_prog get_started/devcube get_started/debug get_started/cmake + get_started/repo .. toctree:: :maxdepth: 1