docs: update format issues left in CN docs

This commit is contained in:
caixinying-git 2023-09-14 10:37:29 +08:00
parent addfc0d870
commit 10a625a7cb
39 changed files with 101 additions and 102 deletions

View File

@ -223,9 +223,9 @@ ESP-BLE-MESH 示例
* :example_file:`Wi-Fi 和 ESP-BLE-MESH 共存 <bluetooth/esp_ble_mesh/wifi_coexist/tutorial/BLE_Mesh_WiFi_Coexist_Example_Walkthrough.md>` - 该示例用于演示 Wi-Fi 和 ESP-BLE-MESH 共存的功能。简而言之,用户可在运行 ESP-BLE-MESH 时使用 Wi-Fi示例请见 :example:`example code <bluetooth/esp_ble_mesh/wifi_coexist>` * :example_file:`Wi-Fi 和 ESP-BLE-MESH 共存 <bluetooth/esp_ble_mesh/wifi_coexist/tutorial/BLE_Mesh_WiFi_Coexist_Example_Walkthrough.md>` - 该示例用于演示 Wi-Fi 和 ESP-BLE-MESH 共存的功能。简而言之,用户可在运行 ESP-BLE-MESH 时使用 Wi-Fi示例请见 :example:`example code <bluetooth/esp_ble_mesh/wifi_coexist>`
* ESP-BLE-MESH 远程配网(v1.1 新增) - :example_file:`Client, Server and device <bluetooth/esp_ble_mesh/remote_provisioning/tutorial/BLE_Mesh_Remote_Provisioning_Example_Walkthrough.md>` - 该示例用于演示 mesh 协议 v1.1 中新增的远程配网功能, 示例请见: :example:`example client code <bluetooth/esp_ble_mesh/remote_provisioning/rpr_client>`, :example:`example server code <bluetooth/esp_ble_mesh/remote_provisioning/rpr_server>` and :example:`example device code <bluetooth/esp_ble_mesh/remote_provisioning/unprov_dev>`. * ESP-BLE-MESH 远程配网v1.1 新增)- :example_file:`Client, Server and device <bluetooth/esp_ble_mesh/remote_provisioning/tutorial/BLE_Mesh_Remote_Provisioning_Example_Walkthrough.md>` - 该示例用于演示 mesh 协议 v1.1 中新增的远程配网功能, 示例请见::example:`example client code <bluetooth/esp_ble_mesh/remote_provisioning/rpr_client>`, :example:`example server code <bluetooth/esp_ble_mesh/remote_provisioning/rpr_server>` and :example:`example device code <bluetooth/esp_ble_mesh/remote_provisioning/unprov_dev>`.
* ESP-BLE-MESH 定向转发(v1.1 新增) - :example_file:`Client and Server <bluetooth/esp_ble_mesh/directed_forwarding/tutorial/BLE_Mesh_Directed_Forwarding_Example_Walkthrough.md>` - 该示例用于演示 mesh 协议 v1.1 中新增的定向转发功能。只有路径上的节点才会对定向消息进行转发,而其他节点不参与转发, 示例请见 :example:`example client code <bluetooth/esp_ble_mesh/remote_provisioning/rpr_client>` and :example:`example server code <bluetooth/esp_ble_mesh/remote_provisioning/rpr_server>`. * ESP-BLE-MESH 定向转发v1.1 新增)- :example_file:`Client and Server <bluetooth/esp_ble_mesh/directed_forwarding/tutorial/BLE_Mesh_Directed_Forwarding_Example_Walkthrough.md>` - 该示例用于演示 mesh 协议 v1.1 中新增的定向转发功能。只有路径上的节点才会对定向消息进行转发,而其他节点不参与转发, 示例请见 :example:`example client code <bluetooth/esp_ble_mesh/remote_provisioning/rpr_client>` and :example:`example server code <bluetooth/esp_ble_mesh/remote_provisioning/rpr_server>`.
.. _esp-ble-mesh-demo-videos: .. _esp-ble-mesh-demo-videos:

View File

@ -81,7 +81,7 @@ ESP-IDF 启动过程中,片外 RAM 被映射到数据虚拟地址空间,该
.. _external_ram_config_malloc: .. _external_ram_config_malloc:
调用 malloc() 分配片外 RAM 调用 ``malloc()`` 分配片外 RAM
--------------------------------- ---------------------------------
:ref:`CONFIG_SPIRAM_USE` 中选择 ``Make RAM allocatable using malloc() as well`` 选项,该选项为默认选项。 :ref:`CONFIG_SPIRAM_USE` 中选择 ``Make RAM allocatable using malloc() as well`` 选项,该选项为默认选项。

View File

@ -160,7 +160,7 @@
仅会打印异常帧中 CPU 寄存器的值,即引发 CPU 异常或者其它严重错误时刻的值。 仅会打印异常帧中 CPU 寄存器的值,即引发 CPU 异常或者其它严重错误时刻的值。
紧急处理程序如果是因 abort() 而调用,则不会打印寄存器转储。 紧急处理程序如果是因 ``abort()`` 而调用,则不会打印寄存器转储。
.. only:: CONFIG_IDF_TARGET_ARCH_XTENSA .. only:: CONFIG_IDF_TARGET_ARCH_XTENSA

View File

@ -1695,7 +1695,7 @@ WPA2-Enterprise 是企业无线网络的安全认证机制。在连接到接入
无线资源管理 无线资源管理
--------------------------- ---------------------------
无线电资源测量802.11k旨在改善网络内流量的分配方式。在无线局域网中,一般情况下,无线设备会连接发射信号最强的接入点 (AP)。根据用户的数量和地理位置,这种分配方式有时会导致某个接入点超负荷而其它接入点利用不足,从而导致整体网络性能下降。在符合 802.11k 规范的网络中,如果信号最强的 AP 已满负荷加载,无线设备则转移到其它未充分利用的 AP。尽管信号可能较弱但由于更有效地利用了网络资源总体吞吐量会更大。 无线电资源测量 (802.11k) 旨在改善网络内流量的分配方式。在无线局域网中,一般情况下,无线设备会连接发射信号最强的接入点 (AP)。根据用户的数量和地理位置,这种分配方式有时会导致某个接入点超负荷而其它接入点利用不足,从而导致整体网络性能下降。在符合 802.11k 规范的网络中,如果信号最强的 AP 已满负荷加载,无线设备则转移到其它未充分利用的 AP。尽管信号可能较弱但由于更有效地利用了网络资源总体吞吐量会更大。
目前 802.11k 的实现支持信标测量报告、链路测量报告和邻居请求。 目前 802.11k 的实现支持信标测量报告、链路测量报告和邻居请求。
@ -1824,7 +1824,7 @@ AP 睡眠
在没有与非 Wi-Fi 协议共存时RF、PHY 和 BB 将会在默认模式下被一直打开。 在没有与非 Wi-Fi 协议共存时RF、PHY 和 BB 将会在默认模式下被一直打开。
在与非 Wi-Fi 协议共存时RF、PHY 和 BB 资源被共存模块分时划给 Wi-Fi 非连接模块和非 Wi-Fi 协议使用。在默认模式下Wi-Fi 非连接模块被允许周期性使用 RF、PHY 和 BB ,并且具有稳定性能。 在与非 Wi-Fi 协议共存时RF、PHY 和 BB 资源被共存模块分时划给 Wi-Fi 非连接模块和非 Wi-Fi 协议使用。在默认模式下Wi-Fi 非连接模块被允许周期性使用 RF、PHY 和 BB并且具有稳定性能。
推荐在与非 Wi-Fi 协议共存时将非连接模块功耗管理配置为默认模式。 推荐在与非 Wi-Fi 协议共存时将非连接模块功耗管理配置为默认模式。
@ -2244,13 +2244,13 @@ Wi-Fi 多根天线配置
子载波的虚部和实部的使用请参考下表。 子载波的虚部和实部的使用请参考下表。
+----------------+-------------------+------------------------------+------------------------------+ +----------------+-------------------+------------------------------+------------------------------+
| PHY 标准 | 子载波范围 | 导频子载波 | 子载波个数(总数/数据子载波) | | PHY 标准 | 子载波范围 | 导频子载波 | 子载波个数(总数/数据子载波)|
+================+===================+==============================+==============================+ +================+===================+==============================+==============================+
| 802.11a/g | -26 to +26 | -21, -7, +7, +21 | 52 total, 48 usable | | 802.11a/g | -26 to +26 | -21, -7, +7, +21 | 52 total, 48 usable |
+----------------+-------------------+------------------------------+------------------------------+ +----------------+-------------------+------------------------------+------------------------------+
| 802.11n, 20MHz | -28 to +28 | -21, -7, +7, +21 | 56 total, 52 usable | | 802.11n, 20 MHz| -28 to +28 | -21, -7, +7, +21 | 56 total, 52 usable |
+----------------+-------------------+------------------------------+------------------------------+ +----------------+-------------------+------------------------------+------------------------------+
| 802.11n, 40MHz | -57 to +57 | -53, -25, -11, +11, +25, +53 | 114 total, 108 usable | | 802.11n, 40 MHz| -57 to +57 | -53, -25, -11, +11, +25, +53 | 114 total, 108 usable |
+----------------+-------------------+------------------------------+------------------------------+ +----------------+-------------------+------------------------------+------------------------------+
.. note :: .. note ::

View File

@ -441,7 +441,7 @@ ESP-IDF 在宏 :c:macro:`ETH_DEFAULT_CONFIG` 中为安装驱动程序提供了
* 以太网基本示例::example:`ethernet/basic` * 以太网基本示例::example:`ethernet/basic`
* 以太网 iperf 示例::example:`ethernet/iperf` * 以太网 iperf 示例::example:`ethernet/iperf`
* 以太网到 Wi-Fi AP “路由器”::example:`network/eth2ap` * 以太网到 Wi-Fi AP“路由器”:example:`network/eth2ap`
* Wi-Fi station 到以太网 “网桥”::example:`network/sta2eth` * Wi-Fi station 到以太网 “网桥”::example:`network/sta2eth`
* 大多数协议示例也适用于以太网::example:`protocols` * 大多数协议示例也适用于以太网::example:`protocols`

View File

@ -172,7 +172,7 @@ ESP-NETIF L2 TAP 可以使用 ``O_NONBLOCK`` 文件状态标志打开,确保 `
^^^^^^^^^^^ ^^^^^^^^^^^
由于新打开的 ESP-NETIF L2 TAP 文件描述符尚未绑定任意网络接口或配置任意帧类型过滤器,使用前,用户需通过以下选项完成配置: 由于新打开的 ESP-NETIF L2 TAP 文件描述符尚未绑定任意网络接口或配置任意帧类型过滤器,使用前,用户需通过以下选项完成配置:
* ``L2TAP_S_INTF_DEVICE`` - 将文件描述符绑定到特定网络接口的选项,该网络接口由其 ``if_key`` 标识。 ESP-NETIF 网络接口的 ``if_key`` 作为第三个参数传输给 ``ioctl()`` ESP-IDF 中,默认网络接口 ``if_key`` 的使用存放在 :component_file:`esp_netif/include/esp_netif_defaults.h` 头文件中。 * ``L2TAP_S_INTF_DEVICE`` - 将文件描述符绑定到特定网络接口的选项,该网络接口由其 ``if_key`` 标识。ESP-NETIF 网络接口的 ``if_key`` 作为第三个参数传输给 ``ioctl()``ESP-IDF 中,默认网络接口 ``if_key`` 的使用存放在 :component_file:`esp_netif/include/esp_netif_defaults.h` 头文件中。
* ``L2TAP_S_DEVICE_DRV_HNDL`` - 将文件描述符绑定到特定网络接口的另一选项。此时,网络接口直接由其 IO 驱动句柄(例如以太网中的 :cpp:type:`esp_eth_handle_t`标识。IO 驱动句柄将作为第三个参数传输给 ``ioctl()`` * ``L2TAP_S_DEVICE_DRV_HNDL`` - 将文件描述符绑定到特定网络接口的另一选项。此时,网络接口直接由其 IO 驱动句柄(例如以太网中的 :cpp:type:`esp_eth_handle_t`标识。IO 驱动句柄将作为第三个参数传输给 ``ioctl()``
* ``L2TAP_S_RCV_FILTER`` - 设置过滤器,将特定类型的帧传递到文件描述符。在以太网中,帧是基于长度和以太网类型字段过滤的。如果过滤器值设置为小于或等于 0x05DC则将以太网类型字段视作 IEEE802.3 长度字段,并将该字段中所有值在 <0, 0x05DC> 区间内的帧传递到文件描述符中。随后,由用户应用程序执行 IEEE802.2 逻辑链路控制 (LLC) 的解析。如果过滤器值设置为大于 0x05DC则将以太网类型字段视为代表协议标识仅将与设置值相等的帧传递到文件描述符中。 * ``L2TAP_S_RCV_FILTER`` - 设置过滤器,将特定类型的帧传递到文件描述符。在以太网中,帧是基于长度和以太网类型字段过滤的。如果过滤器值设置为小于或等于 0x05DC则将以太网类型字段视作 IEEE802.3 长度字段,并将该字段中所有值在 <0, 0x05DC> 区间内的帧传递到文件描述符中。随后,由用户应用程序执行 IEEE802.2 逻辑链路控制 (LLC) 的解析。如果过滤器值设置为大于 0x05DC则将以太网类型字段视为代表协议标识仅将与设置值相等的帧传递到文件描述符中。
@ -211,7 +211,7 @@ ESP-NETIF L2 TAP 可以使用 ``O_NONBLOCK`` 文件状态标志打开,确保 `
^^^^^^^^^^ ^^^^^^^^^^
已开启并完成配置的 ESP-NETIF L2 TAP 文件描述符可通过 ``read()`` 获取入站帧。读取可以是阻塞或非阻塞的,具体取决于 ``O_NONBLOCK`` 文件状态标志的实际状态。当文件状态标志设置为阻塞时,读取程序将等待,直到接收到帧,并将上下文切换到其他任务。当文件状态标志设置为非阻塞时,立即返回读取程序。在此情况下,如果已经帧已经入队,则返回一帧,否则函数指示队列为空。与文件描述符关联的队列帧数量受 :ref:`CONFIG_ESP_NETIF_L2_TAP_RX_QUEUE_SIZE` Kconfig 选项限制。一旦队列里帧的数量达到配置的阈值,新到达的帧将被丢弃,直到队列有足够的空间接受传入的流量(队尾丢弃队列管理)。 已开启并完成配置的 ESP-NETIF L2 TAP 文件描述符可通过 ``read()`` 获取入站帧。读取可以是阻塞或非阻塞的,具体取决于 ``O_NONBLOCK`` 文件状态标志的实际状态。当文件状态标志设置为阻塞时,读取程序将等待,直到接收到帧,并将上下文切换到其他任务。当文件状态标志设置为非阻塞时,立即返回读取程序。在此情况下,如果已经帧已经入队,则返回一帧,否则函数指示队列为空。与文件描述符关联的队列帧数量受 :ref:`CONFIG_ESP_NETIF_L2_TAP_RX_QUEUE_SIZE` Kconfig 选项限制。一旦队列里帧的数量达到配置的阈值,新到达的帧将被丢弃,直到队列有足够的空间接受传入的流量(队尾丢弃队列管理)。
| 成功时read() 函数返回读取的字节数。当目标缓冲区的大小为 0 时,函数返回 0。出错时函数返回 -1并设置 ``errno`` 以指示错误类型。 | 成功时,``read()`` 函数返回读取的字节数。当目标缓冲区的大小为 0 时,函数返回 0。出错时函数返回 -1并设置 ``errno`` 以指示错误类型。
| * EBADF - 文件描述符无效。 | * EBADF - 文件描述符无效。
| * EAGAIN - 文件描述符标记为非阻塞 (``O_NONBLOCK``),但读取受阻塞。 | * EAGAIN - 文件描述符标记为非阻塞 (``O_NONBLOCK``),但读取受阻塞。
@ -231,7 +231,7 @@ ESP-NETIF L2 TAP 可以使用 ``O_NONBLOCK`` 文件状态标志打开,确保 `
* - 6 B * - 6 B
- 6 B - 6 B
- 2 B - 2 B
- 0-1486 B - 0-1486 B
换句话说ESP-NETIF L2 TAP 接口不会对数据帧进行额外处理,只会检查数据帧的以太网类型是否与文件描述符配置的过滤器相同。如果以太网类型不同,则会返回错误,并且不发送数据帧。需要注意的是,由于网络接口是由多个 ESP-NETIF L2 TAP 文件描述符和 IP 栈共享的资源,且当前缺乏列队机制,当前实现中的 ``write()`` 在进入网络接口时可能会受阻塞,。 换句话说ESP-NETIF L2 TAP 接口不会对数据帧进行额外处理,只会检查数据帧的以太网类型是否与文件描述符配置的过滤器相同。如果以太网类型不同,则会返回错误,并且不发送数据帧。需要注意的是,由于网络接口是由多个 ESP-NETIF L2 TAP 文件描述符和 IP 栈共享的资源,且当前缺乏列队机制,当前实现中的 ``write()`` 在进入网络接口时可能会受阻塞,。

View File

@ -46,7 +46,7 @@ Thread
Thread 是一种基于 IPv6 的物联网网状网络技术。 Thread 是一种基于 IPv6 的物联网网状网络技术。
本部分的Thread API 示例代码存放在 ESP-IDF 示例项目的 :example:`openthread` 目录下。 本部分的 Thread API 示例代码存放在 ESP-IDF 示例项目的 :example:`openthread` 目录下。
IP 网络层协议 IP 网络层协议
================ ================

View File

@ -10,7 +10,7 @@
概况 概况
---- ----
{IDF_TARGET_NAME} 有两个 8 位数模转换器 (DAC) 通道,分别连接到 {IDF_TARGET_DAC_CH_1}(通道 1和 {IDF_TARGET_DAC_CH_2}(通道 2。每个 DAC 通道可以将数字值 0~255 转换成模拟电压 0~Vref (此处的 Vref 为 {IDF_TARGET_DAC_REF_PIN} 引脚输入的参考电压,一般来说其输入的电压值应等于电源电压 VDD。输出电压可按以下方式计算:: {IDF_TARGET_NAME} 有两个 8 位数模转换器 (DAC) 通道,分别连接到 {IDF_TARGET_DAC_CH_1}(通道 1和 {IDF_TARGET_DAC_CH_2}(通道 2。每个 DAC 通道可以将数字值 0 ~ 255 转换成模拟电压 0 ~ Vref此处的 Vref 为 {IDF_TARGET_DAC_REF_PIN} 引脚输入的参考电压,一般来说其输入的电压值应等于电源电压 VDD。输出电压可按以下方式计算::
out_voltage = Vref * digi_val / 255 out_voltage = Vref * digi_val / 255

View File

@ -87,9 +87,9 @@ GPIO 捆绑包操作
高阶用户可以通过编写汇编代码或调用 CPU 低层 API 来操作 GPIO。常见步骤为 高阶用户可以通过编写汇编代码或调用 CPU 低层 API 来操作 GPIO。常见步骤为
1. 分配一个 GPIO 捆绑包: :cpp:func:`dedic_gpio_new_bundle` 1. 分配一个 GPIO 捆绑包::cpp:func:`dedic_gpio_new_bundle`
2. 查询该包占用的掩码::cpp:func:`dedic_gpio_get_out_mask` 和/或 :cpp:func:`dedic_gpio_get_in_mask` 2. 查询该包占用的掩码::cpp:func:`dedic_gpio_get_out_mask` 和/或 :cpp:func:`dedic_gpio_get_in_mask`
3. 调用 CPU LL apis (如 `cpu_ll_write_dedic_gpio_mask`) 或使用该掩码编写汇编代码 3. 调用 CPU LL apis(如 `cpu_ll_write_dedic_gpio_mask`或使用该掩码编写汇编代码
4. 切换 IO 的最快捷方式是使用专用的“设置/清除”指令: 4. 切换 IO 的最快捷方式是使用专用的“设置/清除”指令:
.. only:: esp32s2 or esp32s3 .. only:: esp32s2 or esp32s3

View File

@ -8,7 +8,7 @@
如果外设 X 需要向外设 Y 发起事件通知,一般只能通过 CPU 中断实现。在此过程中CPU 会代表外设 X给外设 Y 发送通知。然而在对时间敏感的应用程序中CPU 中断引发的延迟不容忽视。 如果外设 X 需要向外设 Y 发起事件通知,一般只能通过 CPU 中断实现。在此过程中CPU 会代表外设 X给外设 Y 发送通知。然而在对时间敏感的应用程序中CPU 中断引发的延迟不容忽视。
通过引入事件任务矩阵ETM模块,部分外设可以直接通过预先设置的连接关系,将事件通知发送给其他外设,无需 CPU 中断介入。由此,外设实现精确、低延迟同步,并减轻 CPU 负担。 通过引入事件任务矩阵 (ETM) 模块,部分外设可以直接通过预先设置的连接关系,将事件通知发送给其他外设,无需 CPU 中断介入。由此,外设实现精确、低延迟同步,并减轻 CPU 负担。
.. blockdiag:: /../_static/diagrams/etm/etm_channel.diag .. blockdiag:: /../_static/diagrams/etm/etm_channel.diag
:caption: ETM 通道概述 :caption: ETM 通道概述

View File

@ -60,15 +60,15 @@ GPIO 汇总
.. only:: SOC_GPIO_SUPPORT_PIN_HYS_CTRL_BY_EFUSE .. only:: SOC_GPIO_SUPPORT_PIN_HYS_CTRL_BY_EFUSE
每个引脚可以独立启用迟滞功能。默认情况下,它由 eFuse 控制,且处于关闭状态,但也可以由软件控制启用或禁用。可以通过配置 :cpp:member:`gpio_config_t::hys_ctrl_mode` 来选择迟滞控制模式。迟滞控制模式会和其余 GPIO 配置一起在 :cpp:func:`gpio_config` 中生效。 每个引脚可以独立启用迟滞功能。默认情况下,它由 eFuse 控制,且处于关闭状态,但也可以由软件控制启用或禁用。可以通过配置 :cpp:member:`gpio_config_t::hys_ctrl_mode` 来选择迟滞控制模式。迟滞控制模式会和其余 GPIO 配置一起在 :cpp:func:`gpio_config` 中生效。
.. note:: .. note::
当迟滞功能由 eFuse 控制时,仍然可以独立的控制每个引脚的该功能,需要 `烧断 eFuse <https://docs.espressif.com/projects/esptool/en/latest/esp32/espefuse/index.html>`_ ,以在特定 GPIO 启用迟滞功能。 当迟滞功能由 eFuse 控制时,仍然可以独立的控制每个引脚的该功能,需要 `烧断 eFuse <https://docs.espressif.com/projects/esptool/en/latest/esp32/espefuse/index.html>`_ ,以在特定 GPIO 启用迟滞功能。
.. only:: not SOC_GPIO_SUPPORT_PIN_HYS_CTRL_BY_EFUSE .. only:: not SOC_GPIO_SUPPORT_PIN_HYS_CTRL_BY_EFUSE
每个引脚可以独立启用迟滞功能。默认情况下,它处于关闭状态。可以通过配置 :cpp:member:`gpio_config_t::hys_ctrl_mode` 来选择启用与否。迟滞控制模式会和其余 GPIO 配置一起在 :cpp:func:`gpio_config` 中生效。 每个引脚可以独立启用迟滞功能。默认情况下,它处于关闭状态。可以通过配置 :cpp:member:`gpio_config_t::hys_ctrl_mode` 来选择启用与否。迟滞控制模式会和其余 GPIO 配置一起在 :cpp:func:`gpio_config` 中生效。
应用示例 应用示例

View File

@ -284,9 +284,9 @@
电源管理 电源管理
^^^^^^^^ ^^^^^^^^
有些电源管理的策略会在某些时刻关闭时钟源,或者改变时钟源的频率,以求降低功耗。比如在启用 DFS 后, APB 时钟源会降低频率。如果浅睡眠light sleep 模式也被开启, PLL 和 XTAL 时钟都会被默认关闭,从而导致 GPTimer 的计时不准确。 有些电源管理的策略会在某些时刻关闭时钟源,或者改变时钟源的频率,以求降低功耗。比如在启用 DFS 后,APB 时钟源会降低频率。如果浅睡眠 (Light-sleep) 模式也被开启,PLL 和 XTAL 时钟都会被默认关闭,从而导致 GPTimer 的计时不准确。
驱动程序会根据具体的时钟源选择,通过创建不同的电源锁来避免上述情况的发生。驱动会在 :cpp:func:`gptimer_enable` 函数中增加电源锁的引用计数,并在 :cpp:func:`gptimer_disable` 函数中减少电源锁的引用计数,从而保证了在 :cpp:func:`gptimer_enable`:cpp:func:`gptimer_disable` 之间, GPTimer 的时钟源始处于稳定工作的状态。 驱动程序会根据具体的时钟源选择,通过创建不同的电源锁来避免上述情况的发生。驱动会在 :cpp:func:`gptimer_enable` 函数中增加电源锁的引用计数,并在 :cpp:func:`gptimer_disable` 函数中减少电源锁的引用计数,从而保证了在 :cpp:func:`gptimer_enable`:cpp:func:`gptimer_disable` 之间GPTimer 的时钟源始处于稳定工作的状态。
.. _gptimer-iram-safe: .. _gptimer-iram-safe:

View File

@ -10,7 +10,7 @@ I2C 是一种串行同步半双工通信协议,总线上可以同时挂载多
I2C 具有简单且制造成本低廉等优点,主要用于低速外围设备的短距离通信(一英尺以内)。 I2C 具有简单且制造成本低廉等优点,主要用于低速外围设备的短距离通信(一英尺以内)。
{IDF_TARGET_NAME} 有{IDF_TARGET_SOC_I2C_NUM}个 I2C 控制器(也称为端口),负责处理在 I2C 总线上的通信。每个控制器都可以设置为主机或从机。 {IDF_TARGET_NAME} 有 {IDF_TARGET_SOC_I2C_NUM} 个 I2C 控制器(也称为端口),负责处理在 I2C 总线上的通信。每个控制器都可以设置为主机或从机。
驱动程序的功能 驱动程序的功能
--------------- ---------------

View File

@ -65,7 +65,7 @@ LED PWM 控制器可在无需 CPU 干预的情况下自动改变占空比,实
频率和占空比分辨率相互关联。PWM 频率越高,占空比分辨率越低,反之亦然。如果 API 不是用来改变 LED 亮度,而是用于其它目的,这种相互关系可能会很重要。更多信息详见 :ref:`ledc-api-supported-range-frequency-duty-resolution` 一节。 频率和占空比分辨率相互关联。PWM 频率越高,占空比分辨率越低,反之亦然。如果 API 不是用来改变 LED 亮度,而是用于其它目的,这种相互关系可能会很重要。更多信息详见 :ref:`ledc-api-supported-range-frequency-duty-resolution` 一节。
时钟源同样可以限制PWM频率。选择的时钟源频率越高可以配置的PWM频率上限就越高。 时钟源同样可以限制 PWM 频率。选择的时钟源频率越高,可以配置的 PWM 频率上限就越高。
.. only:: esp32 .. only:: esp32
@ -196,7 +196,7 @@ LED PWM 控制器可在无需 CPU 干预的情况下自动改变占空比,实
.. only:: not SOC_CLK_RC_FAST_SUPPORT_CALIBRATION .. only:: not SOC_CLK_RC_FAST_SUPPORT_CALIBRATION
1. 如果 {IDF_TARGET_NAME} 的定时器选用了 ``RC_FAST_CLK`` 作为其时钟源LEDC的输出 PWM 信号频率可能会与设定值有一定偏差。由于 {IDF_TARGET_NAME} 的硬件限制,驱动无法通过内部校准得知这个时钟源的实际频率。因此驱动默认使用其理论频率进行计算。 1. 如果 {IDF_TARGET_NAME} 的定时器选用了 ``RC_FAST_CLK`` 作为其时钟源LEDC 的输出 PWM 信号频率可能会与设定值有一定偏差。由于 {IDF_TARGET_NAME} 的硬件限制,驱动无法通过内部校准得知这个时钟源的实际频率。因此驱动默认使用其理论频率进行计算。
.. only:: not SOC_LEDC_HAS_TIMER_SPECIFIC_MUX .. only:: not SOC_LEDC_HAS_TIMER_SPECIFIC_MUX

View File

@ -81,7 +81,7 @@ PCNT 单元和通道分别用 :cpp:type:`pcnt_unit_handle_t` 与 :cpp:type:`pcnt
- :cpp:member:`pcnt_chan_config_t::edge_gpio_num`:cpp:member:`pcnt_chan_config_t::level_gpio_num` 用于指定 **边沿** 信号和 **电平** 信号对应的 GPIO 编号。请注意,这两个参数未被使用时,可以设置为 `-1`,即成为 **虚拟 IO** 。对于一些简单的脉冲计数应用,电平信号或边沿信号是固定的(即不会发生改变),可将其设置为虚拟 IO然后该信号会被连接到一个固定的高/低逻辑电平,这样就可以在通道分配时回收一个 GPIO节省一个 GPIO 管脚资源。 - :cpp:member:`pcnt_chan_config_t::edge_gpio_num`:cpp:member:`pcnt_chan_config_t::level_gpio_num` 用于指定 **边沿** 信号和 **电平** 信号对应的 GPIO 编号。请注意,这两个参数未被使用时,可以设置为 `-1`,即成为 **虚拟 IO** 。对于一些简单的脉冲计数应用,电平信号或边沿信号是固定的(即不会发生改变),可将其设置为虚拟 IO然后该信号会被连接到一个固定的高/低逻辑电平,这样就可以在通道分配时回收一个 GPIO节省一个 GPIO 管脚资源。
- :cpp:member:`pcnt_chan_config_t::virt_edge_io_level`:cpp:member:`pcnt_chan_config_t::virt_level_io_level` 用于指定 **边沿** 信号和 **电平** 信号的虚拟 IO 电平,以保证这些控制信号处于确定状态。请注意,只有在 :cpp:member:`pcnt_chan_config_t::edge_gpio_num`:cpp:member:`pcnt_chan_config_t::level_gpio_num` 设置为 `-1` 时,这两个参数才有效。 - :cpp:member:`pcnt_chan_config_t::virt_edge_io_level`:cpp:member:`pcnt_chan_config_t::virt_level_io_level` 用于指定 **边沿** 信号和 **电平** 信号的虚拟 IO 电平,以保证这些控制信号处于确定状态。请注意,只有在 :cpp:member:`pcnt_chan_config_t::edge_gpio_num`:cpp:member:`pcnt_chan_config_t::level_gpio_num` 设置为 `-1` 时,这两个参数才有效。
- :cpp:member:`pcnt_chan_config_t::invert_edge_input`:cpp:member:`pcnt_chan_config_t::invert_level_input` 用于确定信号在输入 PCNT 之前是否需要被翻转,信号翻转由 GPIO 矩阵 (不是 PCNT 单元) 执行。 - :cpp:member:`pcnt_chan_config_t::invert_edge_input`:cpp:member:`pcnt_chan_config_t::invert_level_input` 用于确定信号在输入 PCNT 之前是否需要被翻转,信号翻转由 GPIO 矩阵(不是 PCNT 单元)执行。
- :cpp:member:`pcnt_chan_config_t::io_loop_back` 仅用于调试,它可以使能 GPIO 的输入和输出路径。这样,就可以通过调用位于同一 GPIO 上的函数 :cpp:func:`gpio_set_level` 来模拟脉冲信号。 - :cpp:member:`pcnt_chan_config_t::io_loop_back` 仅用于调试,它可以使能 GPIO 的输入和输出路径。这样,就可以通过调用位于同一 GPIO 上的函数 :cpp:func:`gpio_set_level` 来模拟脉冲信号。
调用函数 :cpp:func:`pcnt_new_channel`,将 :cpp:type:`pcnt_chan_config_t` 作为输入值并调用 :cpp:func:`pcnt_new_unit` 返回的 PCNT 单元句柄,可对 PCNT 通道进行分配和初始化。如果该函数正常运行,会返回一个 PCNT 通道句柄。如果没有可用的 PCNT 通道PCNT 通道资源全部被占用),该函数会返回错误 :c:macro:`ESP_ERR_NOT_FOUND`。可用的 PCNT 通道总数记录在 :c:macro:`SOC_PCNT_CHANNELS_PER_UNIT`,以供参考。注意,为某个单元安装 PCNT 通道时,应确保该单元处于初始状态,否则函数 :cpp:func:`pcnt_new_channel` 会返回错误 :c:macro:`ESP_ERR_INVALID_STATE` 调用函数 :cpp:func:`pcnt_new_channel`,将 :cpp:type:`pcnt_chan_config_t` 作为输入值并调用 :cpp:func:`pcnt_new_unit` 返回的 PCNT 单元句柄,可对 PCNT 通道进行分配和初始化。如果该函数正常运行,会返回一个 PCNT 通道句柄。如果没有可用的 PCNT 通道PCNT 通道资源全部被占用),该函数会返回错误 :c:macro:`ESP_ERR_NOT_FOUND`。可用的 PCNT 通道总数记录在 :c:macro:`SOC_PCNT_CHANNELS_PER_UNIT`,以供参考。注意,为某个单元安装 PCNT 通道时,应确保该单元处于初始状态,否则函数 :cpp:func:`pcnt_new_channel` 会返回错误 :c:macro:`ESP_ERR_INVALID_STATE`
@ -227,7 +227,7 @@ PCNT 单元的滤波器可滤除信号中的短时毛刺,:cpp:type:`pcnt_glitc
.. only:: not SOC_PCNT_SUPPORT_CLEAR_SIGNAL .. only:: not SOC_PCNT_SUPPORT_CLEAR_SIGNAL
.. _pcnt-enable-disable-unit: .. _pcnt-enable-disable-unit:
使能和禁用单元 使能和禁用单元
^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
@ -291,7 +291,7 @@ PCNT 内部的硬件计数器会在计数达到高/低门限的时候自动清
电源管理 电源管理
^^^^^^^^^^ ^^^^^^^^^^
使能电源管理 (即 :ref:`CONFIG_PM_ENABLE` 开启) 后,在进入 Light-sleep 模式之前,系统会调整 APB 的频率。这会改变 PCNT 毛刺滤波器的参数,从而可能导致有效信号被滤除。 使能电源管理(即 :ref:`CONFIG_PM_ENABLE` 开启)后,在进入 Light-sleep 模式之前,系统会调整 APB 的频率。这会改变 PCNT 毛刺滤波器的参数,从而可能导致有效信号被滤除。
驱动通过获取 :cpp:enumerator:`ESP_PM_APB_FREQ_MAX` 类型的电源管理锁来防止系统修改 APB 频率。每当通过 :cpp:func:`pcnt_unit_set_glitch_filter` 使能毛刺滤波器时,驱动可以保证系统在 :cpp:func:`pcnt_unit_enable` 使能 PCNT 单元后获取电源管理锁。而系统调用 :cpp:func:`pcnt_unit_disable` 之后,驱动会释放电源管理锁。 驱动通过获取 :cpp:enumerator:`ESP_PM_APB_FREQ_MAX` 类型的电源管理锁来防止系统修改 APB 频率。每当通过 :cpp:func:`pcnt_unit_set_glitch_filter` 使能毛刺滤波器时,驱动可以保证系统在 :cpp:func:`pcnt_unit_enable` 使能 PCNT 单元后获取电源管理锁。而系统调用 :cpp:func:`pcnt_unit_disable` 之后,驱动会释放电源管理锁。
@ -306,7 +306,7 @@ Konfig 选项 :ref:`CONFIG_PCNT_ISR_IRAM_SAFE` 可以实现以下功能:
1. 即使缓存被禁用也可以使能中断服务 1. 即使缓存被禁用也可以使能中断服务
2. 将 ISR 使用的所有函数都放入 IRAM 中 [2]_ 2. 将 ISR 使用的所有函数都放入 IRAM 中 [2]_
3. 将驱动对象放入 DRAM (防止驱动对象被意外映射到 PSRAM 中) 3. 将驱动对象放入 DRAM(防止驱动对象被意外映射到 PSRAM 中)
这样,在缓存被禁用时,中断也可运行,但是这也会增加 IRAM 的消耗。 这样,在缓存被禁用时,中断也可运行,但是这也会增加 IRAM 的消耗。
@ -338,7 +338,7 @@ Konfig 选项 :ref:`CONFIG_PCNT_ISR_IRAM_SAFE` 可以实现以下功能:
支持的 Kconfig 选项 支持的 Kconfig 选项
^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
- :ref:`CONFIG_PCNT_CTRL_FUNC_IN_IRAM` 用于确定 PCNT 控制函数的位置 (放在 IRAM 还是 flash 中),请参考 :ref:`pcnt-iram-safe` 获取更多信息。 - :ref:`CONFIG_PCNT_CTRL_FUNC_IN_IRAM` 用于确定 PCNT 控制函数的位置(放在 IRAM 还是 flash 中),请参考 :ref:`pcnt-iram-safe` 获取更多信息。
- :ref:`CONFIG_PCNT_ISR_IRAM_SAFE` 用于控制当缓存禁用时,默认的 ISR 句柄是否可以工作,请参考 :ref:`pcnt-iram-safe` 获取更多信息。 - :ref:`CONFIG_PCNT_ISR_IRAM_SAFE` 用于控制当缓存禁用时,默认的 ISR 句柄是否可以工作,请参考 :ref:`pcnt-iram-safe` 获取更多信息。
- :ref:`CONFIG_PCNT_ENABLE_DEBUG_LOG` 用于使能调试日志输出,而这会增大固件二进制文件。 - :ref:`CONFIG_PCNT_ENABLE_DEBUG_LOG` 用于使能调试日志输出,而这会增大固件二进制文件。

View File

@ -92,7 +92,7 @@ RMT 接收器可以对输入信号采样,将其转换为 RMT 数据格式,
- :cpp:member:`rmt_tx_channel_config_t::with_dma` 为通道启用 DMA 后端。启用 DMA 后端可以释放 CPU 上的大部分通道工作负载,显著减轻 CPU 负担。但并非所有 ESP 芯片都支持 DMA 后端,在启用此选项前,请参阅 [`TRM <{IDF_TARGET_TRM_EN_URL}#rmt>`__]。若所选芯片不支持 DMA 后端,可能会报告 :c:macro:`ESP_ERR_NOT_SUPPORTED` 错误。 - :cpp:member:`rmt_tx_channel_config_t::with_dma` 为通道启用 DMA 后端。启用 DMA 后端可以释放 CPU 上的大部分通道工作负载,显著减轻 CPU 负担。但并非所有 ESP 芯片都支持 DMA 后端,在启用此选项前,请参阅 [`TRM <{IDF_TARGET_TRM_EN_URL}#rmt>`__]。若所选芯片不支持 DMA 后端,可能会报告 :c:macro:`ESP_ERR_NOT_SUPPORTED` 错误。
- :cpp:member:`rmt_tx_channel_config_t::io_loop_back` 启用通道所分配的 GPIO 上的输入和输出功能,将发送通道和接收通道绑定到同一个 GPIO 上,从而实现回环功能。 - :cpp:member:`rmt_tx_channel_config_t::io_loop_back` 启用通道所分配的 GPIO 上的输入和输出功能,将发送通道和接收通道绑定到同一个 GPIO 上,从而实现回环功能。
- :cpp:member:`rmt_tx_channel_config_t::io_od_mode` 配置通道分配的 GPIO 为开漏模式 (open-drain)。当与 :cpp:member:`rmt_tx_channel_config_t::io_loop_back` 结合使用时,可以实现双向总线,如 1-wire。 - :cpp:member:`rmt_tx_channel_config_t::io_od_mode` 配置通道分配的 GPIO 为开漏模式 (open-drain)。当与 :cpp:member:`rmt_tx_channel_config_t::io_loop_back` 结合使用时,可以实现双向总线,如 1-wire。
- :cpp:member:`rmt_tx_channel_config_t::intr_priority` 设置中断的优先级。如果设置为 ``0`` 驱动将会使用一个中低优先级的中断优先级可能为12或3否则会使用 :cpp:member:`rmt_tx_channel_config_t::intr_priority` 指定的优先级。请使用优先级序号123而不是bitmask的形式((1<<1)(1<<2)(1<<3))。请注意,中断优先级一旦设置,在 :cpp:func:`rmt_del_channel` 被调用之前不可再次修改。 - :cpp:member:`rmt_tx_channel_config_t::intr_priority` 设置中断的优先级。如果设置为 ``0`` ,驱动将会使用一个中低优先级的中断(优先级可能为 12 3否则会使用 :cpp:member:`rmt_tx_channel_config_t::intr_priority` 指定的优先级。请使用优先级序号 (1, 2, 3),而不是 bitmask 的形式((1<<1)(1<<2)(1<<3))。请注意,中断优先级一旦设置,在 :cpp:func:`rmt_del_channel` 被调用之前不可再次修改。
将必要参数填充到结构体 :cpp:type:`rmt_tx_channel_config_t` 后,可以调用 :cpp:func:`rmt_new_tx_channel` 来分配和初始化 TX 通道。如果函数运行正确,会返回 RMT 通道句柄;如果 RMT 资源池内缺少空闲通道,会返回 :c:macro:`ESP_ERR_NOT_FOUND` 错误;如果硬件不支持 DMA 后端等部分功能,则返回 :c:macro:`ESP_ERR_NOT_SUPPORTED` 错误。 将必要参数填充到结构体 :cpp:type:`rmt_tx_channel_config_t` 后,可以调用 :cpp:func:`rmt_new_tx_channel` 来分配和初始化 TX 通道。如果函数运行正确,会返回 RMT 通道句柄;如果 RMT 资源池内缺少空闲通道,会返回 :c:macro:`ESP_ERR_NOT_FOUND` 错误;如果硬件不支持 DMA 后端等部分功能,则返回 :c:macro:`ESP_ERR_NOT_SUPPORTED` 错误。
@ -126,7 +126,7 @@ RMT 接收器可以对输入信号采样,将其转换为 RMT 数据格式,
- :cpp:member:`rmt_rx_channel_config_t::invert_in` 在输入信号传递到 RMT 接收器前对其进行反转。该反转由 GPIO 交换矩阵完成,而非 RMT 外设。 - :cpp:member:`rmt_rx_channel_config_t::invert_in` 在输入信号传递到 RMT 接收器前对其进行反转。该反转由 GPIO 交换矩阵完成,而非 RMT 外设。
- :cpp:member:`rmt_rx_channel_config_t::with_dma` 为通道启用 DMA 后端。启用 DMA 后端可以释放 CPU 上的大部分通道工作负载,显著减轻 CPU 负担。但并非所有 ESP 芯片都支持 DMA 后端,在启用此选项前,请参阅 [`TRM <{IDF_TARGET_TRM_EN_URL}#rmt>`__]。若所选芯片不支持 DMA 后端,可能会报告 :c:macro:`ESP_ERR_NOT_SUPPORTED` 错误。 - :cpp:member:`rmt_rx_channel_config_t::with_dma` 为通道启用 DMA 后端。启用 DMA 后端可以释放 CPU 上的大部分通道工作负载,显著减轻 CPU 负担。但并非所有 ESP 芯片都支持 DMA 后端,在启用此选项前,请参阅 [`TRM <{IDF_TARGET_TRM_EN_URL}#rmt>`__]。若所选芯片不支持 DMA 后端,可能会报告 :c:macro:`ESP_ERR_NOT_SUPPORTED` 错误。
- :cpp:member:`rmt_rx_channel_config_t::io_loop_back` 启用通道所分配的 GPIO 上的输入和输出功能,将发送通道和接收通道绑定到同一个 GPIO 上,从而实现回环功能。 - :cpp:member:`rmt_rx_channel_config_t::io_loop_back` 启用通道所分配的 GPIO 上的输入和输出功能,将发送通道和接收通道绑定到同一个 GPIO 上,从而实现回环功能。
- :cpp:member:`rmt_rx_channel_config_t::intr_priority` 设置中断的优先级。如果设置为 ``0`` 驱动将会使用一个中低优先级的中断优先级可能为12或3否则会使用 :cpp:member:`rmt_rx_channel_config_t::intr_priority` 指定的优先级。请使用优先级序号123而不是bitmask的形式((1<<1)(1<<2)(1<<3))。请注意,中断优先级一旦设置,在 :cpp:func:`rmt_del_channel` 被调用之前不可再次修改。 - :cpp:member:`rmt_rx_channel_config_t::intr_priority` 设置中断的优先级。如果设置为 ``0`` ,驱动将会使用一个中低优先级的中断(优先级可能为 12 3否则会使用 :cpp:member:`rmt_rx_channel_config_t::intr_priority` 指定的优先级。请使用优先级序号 (123),而不是 bitmask 的形式((1<<1)(1<<2)(1<<3))。请注意,中断优先级一旦设置,在 :cpp:func:`rmt_del_channel` 被调用之前不可再次修改。
将必要参数填充到结构体 :cpp:type:`rmt_rx_channel_config_t` 后,可以调用 :cpp:func:`rmt_new_rx_channel` 来分配和初始化 RX 通道。如果函数运行正确,会返回 RMT 通道句柄;如果 RMT 资源池内缺少空闲通道,会返回 :c:macro:`ESP_ERR_NOT_FOUND` 错误;如果硬件不支持 DMA 后端等部分功能,则返回 :c:macro:`ESP_ERR_NOT_SUPPORTED` 错误。 将必要参数填充到结构体 :cpp:type:`rmt_rx_channel_config_t` 后,可以调用 :cpp:func:`rmt_new_rx_channel` 来分配和初始化 RX 通道。如果函数运行正确,会返回 RMT 通道句柄;如果 RMT 资源池内缺少空闲通道,会返回 :c:macro:`ESP_ERR_NOT_FOUND` 错误;如果硬件不支持 DMA 后端等部分功能,则返回 :c:macro:`ESP_ERR_NOT_SUPPORTED` 错误。
@ -146,7 +146,7 @@ RMT 接收器可以对输入信号采样,将其转换为 RMT 数据格式,
.. note:: .. note::
由于 GPIO 驱动程序中的软件限制,当 TX 和 RX 通道都绑定到同一 GPIO 时,请确保在 TX 通道之前初始化 RX 通道。如果先设置 TX 通道,那么在 RX 通道设置期间GPIO 控制信号将覆盖先前的 RMT TX 通道信号。 由于 GPIO 驱动程序中的软件限制,当 TX 和 RX 通道都绑定到同一 GPIO 时,请确保在 TX 通道之前初始化 RX 通道。如果先设置 TX 通道,那么在 RX 通道设置期间GPIO 控制信号将覆盖先前的 RMT TX 通道信号。
卸载 RMT 通道 卸载 RMT 通道
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~

View File

@ -195,7 +195,7 @@ SDIO 从机驱动程序的相关术语如下:
1. 调用 ``sdio_slave_recv_register_buf`` 注册缓冲区,并获取已注册缓冲区的句柄。驱动程序会为链接到硬件的链表描述符所需的缓冲区分配内存。这些缓冲区的大小应与接收缓冲区大小相等。 1. 调用 ``sdio_slave_recv_register_buf`` 注册缓冲区,并获取已注册缓冲区的句柄。驱动程序会为链接到硬件的链表描述符所需的缓冲区分配内存。这些缓冲区的大小应与接收缓冲区大小相等。
2. 将缓冲区句柄传递给 ``sdio_slave_recv_load_buf``,将缓冲区加载到驱动程序中。 2. 将缓冲区句柄传递给 ``sdio_slave_recv_load_buf``,将缓冲区加载到驱动程序中。
3. 调用 ``sdio_slave_recv````sdio_slave_recv_packet`` 获取接收到的数据。如果需要采取非阻塞式调用,可以设置 ``wait`` 为0。 3. 调用 ``sdio_slave_recv````sdio_slave_recv_packet`` 获取接收到的数据。如果需要采取非阻塞式调用,可以设置 ``wait`` 0。
这两个 API 的区别在于,``sdio_slave_recv_packet`` 会提供更多有关数据包的信息,数据包可以由多个缓冲区组成。 这两个 API 的区别在于,``sdio_slave_recv_packet`` 会提供更多有关数据包的信息,数据包可以由多个缓冲区组成。

View File

@ -1,4 +1,4 @@
SPI Flash API SPI flash API
================= =================
:link_to_translation:`en:[English]` :link_to_translation:`en:[English]`
@ -18,7 +18,7 @@ spi_flash 组件提供外部 flash 数据读取、写入、擦除和内存映射
.. note:: .. note::
大多数 ``esp_flash_*`` API 使用 SPI1SPI2 等外设而非通过 SPI0 上的 cache。这使得它们不仅能访问主 flash也能访问外部 flash 大多数 ``esp_flash_*`` API 使用 SPI1SPI2 等外设而非通过 SPI0 上的 cache。这使得它们不仅能访问主 flash也能访问外部 flash。
而由于 cache 的限制,所有经过 cache 的操作都只能对主 flash 进行。这些操作的地址同样受到 cache 能力的限制。Cache 无法访问外部 flash 或者高于它能力的地址段。这些 cache 操作包括mmap、加密读写、执行代码或者访问在 flash 中的变量。 而由于 cache 的限制,所有经过 cache 的操作都只能对主 flash 进行。这些操作的地址同样受到 cache 能力的限制。Cache 无法访问外部 flash 或者高于它能力的地址段。这些 cache 操作包括mmap、加密读写、执行代码或者访问在 flash 中的变量。
@ -30,10 +30,10 @@ spi_flash 组件提供外部 flash 数据读取、写入、擦除和内存映射
仅有主 flash 芯片支持加密操作,外接(经 SPI1 使用其他不同片选访问,或经其它 SPI 总线访问)的 flash 芯片则不支持加密操作。硬件的限制也决定了仅有主 flash 支持从 cache 当中读取。 仅有主 flash 芯片支持加密操作,外接(经 SPI1 使用其他不同片选访问,或经其它 SPI 总线访问)的 flash 芯片则不支持加密操作。硬件的限制也决定了仅有主 flash 支持从 cache 当中读取。
Flash 功能支持情况 flash 功能支持情况
----------------------------------- -----------------------------------
支持的 Flash 列表 支持的 flash 列表
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
不同厂家的 flash 特性有不同的操作方式,因此需要特殊的驱动支持。当前驱动支持大多数厂家 flash 24 位地址范围内的快速/慢速读,以及二线模式 (DIO/DOUT),因为他们不需要任何厂家的自定义命令。 不同厂家的 flash 特性有不同的操作方式,因此需要特殊的驱动支持。当前驱动支持大多数厂家 flash 24 位地址范围内的快速/慢速读,以及二线模式 (DIO/DOUT),因为他们不需要任何厂家的自定义命令。
@ -50,9 +50,9 @@ Flash 功能支持情况
.. note:: .. note::
只有 {IDF_TARGET_NAME} 支持上述某个 flash 时,芯片的驱动才默认支持这款 flash。可使用 menuconfig 中的 ``Component config`` > ``SPI Flash driver`` > ``Auto-detect flash chips`` 选项来使能/禁用某个 flash。 只有 {IDF_TARGET_NAME} 支持上述某个 flash 时,芯片的驱动才默认支持这款 flash。可使用 menuconfig 中的 ``Component config`` > ``SPI flash driver`` > ``Auto-detect flash chips`` 选项来使能/禁用某个 flash。
Flash 可选的功能 flash 可选的功能
^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
.. toctree:: .. toctree::
@ -64,15 +64,15 @@ Flash 可选的功能
.. only:: esp32s3 .. only:: esp32s3
- OPI flash - 表示 Flash 支持 8 线模式。 - OPI flash - 表示 flash 支持 8 线模式。
- 32 比特地址的 flash 支持 - 通常意味着拥有大于 16 MB 内存空间的大容量 flash 需要更长的地址去访问。 - 32 比特地址的 flash 支持 - 通常意味着拥有大于 16 MB 内存空间的大容量 flash 需要更长的地址去访问。
.. only:: esp32s3 .. only:: esp32s3
- 高性能 (HPM) 模式 - 表示 flash 工作频率大于 80MHz - 高性能 (HPM) 模式 - 表示 flash 工作频率大于 80 MHz。
- flash 的私有 ID (unique ID) - 表示 flash 支持它自己的 64-bit 独有 ID - flash 的私有 ID (unique ID) - 表示 flash 支持它自己的 64-bit 独有 ID。
.. only:: esp32c3 .. only:: esp32c3
@ -87,7 +87,7 @@ Flash 可选的功能
自定义 flash 芯片驱动 <spi_flash_override_driver> 自定义 flash 芯片驱动 <spi_flash_override_driver>
初始化 Flash 设备 初始化 flash 设备
--------------------------- ---------------------------
在使用 ``esp_flash_*`` API 之前,需要在 SPI 总线上初始化芯片,步骤如下: 在使用 ``esp_flash_*`` API 之前,需要在 SPI 总线上初始化芯片,步骤如下:
@ -100,7 +100,7 @@ Flash 可选的功能
.. note:: 当前,已支持多个 flash 芯片连接到同一总线。 .. note:: 当前,已支持多个 flash 芯片连接到同一总线。
SPI Flash 访问 API SPI flash 访问 API
-------------------- --------------------
如下所示为处理 flash 中数据的函数集: 如下所示为处理 flash 中数据的函数集:
@ -113,7 +113,7 @@ SPI Flash 访问 API
一般来说,请尽量避免对主 SPI flash 芯片直接使用原始 SPI flash 函数。如需对主 SPI flash 芯片进行操作,请使用 :ref:`分区专用函数 <flash-partition-apis>` 一般来说,请尽量避免对主 SPI flash 芯片直接使用原始 SPI flash 函数。如需对主 SPI flash 芯片进行操作,请使用 :ref:`分区专用函数 <flash-partition-apis>`
SPI Flash 容量 SPI flash 容量
-------------- --------------
SPI flash 容量由引导加载程序镜像头部(烧录偏移量为 0x1000的一个字段进行配置。 SPI flash 容量由引导加载程序镜像头部(烧录偏移量为 0x1000的一个字段进行配置。
@ -122,7 +122,7 @@ SPI flash 容量由引导加载程序镜像头部(烧录偏移量为 0x1000
如需在运行时覆盖已配置的 flash 容量,请配置 ``g_rom_flashchip`` 结构中的 ``chip_size````esp_flash_*`` 函数使用此容量(于软件和 ROM 中)进行边界检查。 如需在运行时覆盖已配置的 flash 容量,请配置 ``g_rom_flashchip`` 结构中的 ``chip_size````esp_flash_*`` 函数使用此容量(于软件和 ROM 中)进行边界检查。
SPI1 Flash 并发约束 SPI1 flash 并发约束
----------------------------------------- -----------------------------------------
.. toctree:: .. toctree::
@ -135,7 +135,7 @@ SPI1 Flash 并发约束
指令/数据 cache用以执行固件与 SPI1 外设(由像 SPI flash 驱动一样的驱动程序控制)共享 SPI0/1 总线。因此,在 SPI1 总线上调用 SPI flash API包括访问主 flash会对整个系统造成显著的影响。请参阅 :doc:`spi_flash_concurrency`,查看详细信息。 指令/数据 cache用以执行固件与 SPI1 外设(由像 SPI flash 驱动一样的驱动程序控制)共享 SPI0/1 总线。因此,在 SPI1 总线上调用 SPI flash API包括访问主 flash会对整个系统造成显著的影响。请参阅 :doc:`spi_flash_concurrency`,查看详细信息。
SPI Flash 加密 SPI flash 加密
-------------------- --------------------
SPI flash 内容支持加密,并在硬件层进行透明解密。 SPI flash 内容支持加密,并在硬件层进行透明解密。
@ -149,11 +149,11 @@ SPI flash 内容支持加密,并在硬件层进行透明解密。
{IDF_TARGET_NAME} 的内存硬件可以将 flash 部分区域映射到指令地址空间和数据地址空间。此映射仅用于读操作,不能通过写入 flash 映射的存储区域来改变 flash 中的内容。 {IDF_TARGET_NAME} 的内存硬件可以将 flash 部分区域映射到指令地址空间和数据地址空间。此映射仅用于读操作,不能通过写入 flash 映射的存储区域来改变 flash 中的内容。
Flash 在 {IDF_TARGET_CACHE_SIZE} 页进行映射。内存映射硬件既可将 flash 映射到数据地址空间,也能映射到指令地址空间。请查看技术参考手册,了解内存映射硬件的详细信息及有关限制。 flash 在 {IDF_TARGET_CACHE_SIZE} 页进行映射。内存映射硬件既可将 flash 映射到数据地址空间,也能映射到指令地址空间。请查看技术参考手册,了解内存映射硬件的详细信息及有关限制。
请注意,有些页被用于将应用程序映射到内存中,因此实际可用的页会少于硬件提供的总数。 请注意,有些页被用于将应用程序映射到内存中,因此实际可用的页会少于硬件提供的总数。
启用 :doc:`Flash 加密 </security/flash-encryption>` 时,使用内存映射区域从 flash 读取数据是解密 flash 的唯一方法,解密需在硬件层进行。 启用 :doc:`flash 加密 </security/flash-encryption>` 时,使用内存映射区域从 flash 读取数据是解密 flash 的唯一方法,解密需在硬件层进行。
内存映射 API 在 ``spi_flash_mmap.h````esp_partition.h`` 中声明: 内存映射 API 在 ``spi_flash_mmap.h````esp_partition.h`` 中声明:
@ -169,10 +169,10 @@ Flash 在 {IDF_TARGET_CACHE_SIZE} 页进行映射。内存映射硬件既可将
内存映射以页为单位,即使传递给 ``esp_partition_mmap`` 的是一个分区,分区外的数据也是也是可以被读取到的,不会受到分区边界的影响。 内存映射以页为单位,即使传递给 ``esp_partition_mmap`` 的是一个分区,分区外的数据也是也是可以被读取到的,不会受到分区边界的影响。
.. note:: .. note::
由于 mmap 是由 cache 支持的因此mmap 也仅能用在主 flash 上。 由于 mmap 是由 cache 支持的因此mmap 也仅能用在主 flash 上。
SPI Flash 实现 SPI flash 实现
-------------- --------------
``esp_flash_t`` 结构体包含芯片数据和该 API 的三个重要部分: ``esp_flash_t`` 结构体包含芯片数据和该 API 的三个重要部分:
@ -247,7 +247,7 @@ OS 函数层目前支持访问锁和延迟的方法。
执行 flash 操作时CPU A 和 CPU B 仍然可以执行中断操作。默认中断代码均存储于 RAM 中,如果新添加了中断分配 API则应添加一个标志位以请求在 flash 操作期间禁用该新分配的中断。 执行 flash 操作时CPU A 和 CPU B 仍然可以执行中断操作。默认中断代码均存储于 RAM 中,如果新添加了中断分配 API则应添加一个标志位以请求在 flash 操作期间禁用该新分配的中断。
Flash 操作完成后CPU A 上的函数将设置另一标志位,即 ``s_flash_op_complete``,用以通知 CPU B 上的任务可以重新启用 cache 并释放 CPU。接着CPU A 上的函数也重新启用 cache并将控制权返还给调用者。 flash 操作完成后CPU A 上的函数将设置另一标志位,即 ``s_flash_op_complete``,用以通知 CPU B 上的任务可以重新启用 cache 并释放 CPU。接着CPU A 上的函数也重新启用 cache并将控制权返还给调用者。
另外,所有 API 函数均受互斥量 ``s_flash_op_mutex`` 保护。 另外,所有 API 函数均受互斥量 ``s_flash_op_mutex`` 保护。
@ -268,7 +268,7 @@ Flash 操作完成后CPU A 上的函数将设置另一标志位,即 ``s_fla
spi_flash_idf_vs_rom spi_flash_idf_vs_rom
SPI Flash API 参考 SPI flash API 参考
------------------------- -------------------------
.. include-build-file:: inc/esp_flash_spi_init.inc .. include-build-file:: inc/esp_flash_spi_init.inc
@ -278,7 +278,7 @@ SPI Flash API 参考
.. include-build-file:: inc/esp_flash_err.inc .. include-build-file:: inc/esp_flash_err.inc
.. include-build-file:: inc/esp_spi_flash_counters.inc .. include-build-file:: inc/esp_spi_flash_counters.inc
Flash 加密 API 参考 flash 加密 API 参考
----------------------------- -----------------------------
.. include-build-file:: inc/esp_flash_encrypt.inc .. include-build-file:: inc/esp_flash_encrypt.inc

View File

@ -118,7 +118,7 @@
* - T13 * - T13
- GPIO13 - GPIO13
* - T14 * - T14
- GPIO14 - GPIO14
使用 :cpp:func:`touch_pad_set_fsm_mode` 选择触摸传感器测量(由 FSM 操作)是由硬件定时器自动启动,还是由软件自动启动。如果选择软件模式,请使用 :cpp:func:`touch_pad_sw_start` 启动 FSM。 使用 :cpp:func:`touch_pad_set_fsm_mode` 选择触摸传感器测量(由 FSM 操作)是由硬件定时器自动启动,还是由软件自动启动。如果选择软件模式,请使用 :cpp:func:`touch_pad_sw_start` 启动 FSM。
@ -185,7 +185,7 @@
* 触摸传感器充放电参数: * 触摸传感器充放电参数:
* 电压门限::cpp:func:`touch_pad_set_voltage` * 电压门限::cpp:func:`touch_pad_set_voltage`
* 速率(斜率) :cpp:func:`touch_pad_set_cnt_mode` * 速率(斜率):cpp:func:`touch_pad_set_cnt_mode`
.. only:: SOC_TOUCH_VERSION_1 .. only:: SOC_TOUCH_VERSION_1

View File

@ -8,7 +8,7 @@
通用异步接收器/发送器 (UART) 属于一种硬件功能,通过使用 RS232、RS422、RS485 等常见异步串行通信接口来处理通信时序要求和数据帧。UART 是实现不同设备之间全双工或半双工数据交换的一种常用且经济的方式。 通用异步接收器/发送器 (UART) 属于一种硬件功能,通过使用 RS232、RS422、RS485 等常见异步串行通信接口来处理通信时序要求和数据帧。UART 是实现不同设备之间全双工或半双工数据交换的一种常用且经济的方式。
{IDF_TARGET_NAME} 芯片有{IDF_TARGET_SOC_UART_HP_NUM}个 UART 控制器(也称为端口),每个控制器都有一组相同的寄存器以简化编程并提高灵活性。 {IDF_TARGET_NAME} 芯片有 {IDF_TARGET_SOC_UART_HP_NUM} 个 UART 控制器(也称为端口),每个控制器都有一组相同的寄存器以简化编程并提高灵活性。
每个 UART 控制器可以独立配置波特率、数据位长度、位顺序、停止位位数、奇偶校验位等参数。所有具备完整功能的 UART 控制器都能与不同制造商的 UART 设备兼容,并且支持红外数据协会 (IrDA) 定义的标准协议。 每个 UART 控制器可以独立配置波特率、数据位长度、位顺序、停止位位数、奇偶校验位等参数。所有具备完整功能的 UART 控制器都能与不同制造商的 UART 设备兼容,并且支持红外数据协会 (IrDA) 定义的标准协议。

View File

@ -45,7 +45,7 @@ ESP SDIO 主从机通信
1. SDIO 复位 1. SDIO 复位
CMD52写入 0x6=0x8 CMD52写入 0x6 = 0x8
2. SD 复位 2. SD 复位
@ -63,9 +63,9 @@ ESP SDIO 主从机通信
**示例:** **示例:**
首次 CMD5 (arg=0x00000000) 后 R4 的 arg 为 0xXXFFFF00。 首次 CMD5 (arg = 0x00000000) 后 R4 的 arg 为 0xXXFFFF00。
不断发送 CMD5 arg=0x00FFFF00直到 R4 显示卡已就绪 (arg 31=1) 为止。 不断发送 CMD5 arg = 0x00FFFF00直到 R4 显示卡已就绪 (arg 31 = 1) 为止。
5. 设置地址 5. 设置地址
@ -83,35 +83,35 @@ ESP SDIO 主从机通信
7. 选择 4-bit 模式(可选) 7. 选择 4-bit 模式(可选)
CMD52写入 0x07=0x02 CMD52写入 0x07 = 0x02
8. 启用 Func1 8. 启用 Func1
CMD52写入 0x02=0x02 CMD52写入 0x02 = 0x02
9. 启用 SDIO 中断(使用中断线 (DAT1) 时必要) 9. 启用 SDIO 中断(使用中断线 (DAT1) 时必要)
CMD52写入 0x04=0x03 CMD52写入 0x04 = 0x03
10. 设置 Func0 块大小(可选,默认为 512 (0x200) 字节) 10. 设置 Func0 块大小(可选,默认为 512 (0x200) 字节)
CMD52/53读取 0x10~0x11 CMD52/53读取 0x10 ~ 0x11
CMD52/53写入 0x10=0x00 CMD52/53写入 0x10 = 0x00
CMD52/53写入 0x11=0x02 CMD52/53写入 0x11 = 0x02
CMD52/53再次读取 0x10~0x11, 检查最终写入的值) CMD52/53再次读取 0x10 ~ 0x11, 检查最终写入的值)
11. 设置 Func1 块大小(可选,默认为 512 (0x200) 字节) 11. 设置 Func1 块大小(可选,默认为 512 (0x200) 字节)
CMD52/53读取 0x110~0x111 CMD52/53读取 0x110 ~ 0x111
CMD52/53写入 0x110=0x00 CMD52/53写入 0x110 = 0x00
CMD52/53写入 0x111=0x02 CMD52/53写入 0x111 = 0x02
CMD52/53再次读取 0x110~0x111, 检查最终写入的值) CMD52/53再次读取 0x110 ~ 0x111, 检查最终写入的值)
.. _esp_slave_protocol_layer: .. _esp_slave_protocol_layer:
@ -177,8 +177,8 @@ CMD53 的地址与单次传输中从从机读取或写入从机的要求长度 (
为了提高以任意长度访问 FIFO 时的效率,可以将 CMD53 的块模式和字节模式结合使用。例如,如果块大小默认设置为 512 字节,则可以通过以下操作从 FIFO 中写入或获取 1031 字节的数据: 为了提高以任意长度访问 FIFO 时的效率,可以将 CMD53 的块模式和字节模式结合使用。例如,如果块大小默认设置为 512 字节,则可以通过以下操作从 FIFO 中写入或获取 1031 字节的数据:
1. 在块模式下发送 CMD53block count = 21024 字节)到 0x1F3F9=0x1F800-**1031** 1. 在块模式下发送 CMD53block count = 21024 字节)到 0x1F3F9 = 0x1F800 - **1031**
2. 然后在字节模式下发送 CMD53byte count = 8如果控制器支持也可为 7到 0x1F7F9=0x1F800-**7** 2. 然后在字节模式下发送 CMD53byte count = 8如果控制器支持也可为 7到 0x1F7F9 = 0x1F800 - **7**
.. _esp_sdio_slave_interrupts: .. _esp_sdio_slave_interrupts:

View File

@ -5,18 +5,18 @@
本节提供高层次的存储 API 的参考文档。这些 API 基于如 SPI Flash、SD/MMC 等低层次驱动。 本节提供高层次的存储 API 的参考文档。这些 API 基于如 SPI Flash、SD/MMC 等低层次驱动。
- :doc:`分区表 API <partition>` 基于 :doc:`分区表 </api-guides/partition-tables>` ,允许以块为单位访问 SPI Flash - :doc:`分区表 API <partition>` 基于 :doc:`分区表 </api-guides/partition-tables>` ,允许以块为单位访问 SPI Flash。
- :doc:`非易失性存储库 (NVS) <nvs_flash>` 在 SPI NOR Flash 上实现了一个有容错性,和磨损均衡功能的键值对存储。 - :doc:`非易失性存储库 (NVS) <nvs_flash>` 在 SPI NOR Flash 上实现了一个有容错性,和磨损均衡功能的键值对存储。
- :doc:`虚拟文件系统 (VFS) <vfs>` 库提供了一个用于注册文件系统驱动的接口。 SPIFFS、FAT 以及多种其他的文件系统库都基于 VFS。 - :doc:`虚拟文件系统 (VFS) <vfs>` 库提供了一个用于注册文件系统驱动的接口。SPIFFS、FAT 以及多种其他的文件系统库都基于 VFS。
- :doc:`SPIFFS <spiffs>` 是一个专为 SPI NOR Flash 优化的磨损均衡的文件系统,非常适用于小分区和低吞吐率的应用。 - :doc:`SPIFFS <spiffs>` 是一个专为 SPI NOR Flash 优化的磨损均衡的文件系统,非常适用于小分区和低吞吐率的应用。
- :doc:`FAT <fatfs>` 是一个可用于 SPI Flash 或者 SD/MMC 存储卡的标准文件系统。 - :doc:`FAT <fatfs>` 是一个可用于 SPI Flash 或者 SD/MMC 存储卡的标准文件系统。
- :doc:`磨损均衡 <wear-levelling>` 库实现了一个适用于 SPI NOR Flash 的 Flash 翻译层 (FTL),用于 Flash 中 FAT 分区的容器。 - :doc:`磨损均衡 <wear-levelling>` 库实现了一个适用于 SPI NOR Flash 的 flash 翻译层 (FTL),用于 flash 中 FAT 分区的容器。
.. note:: .. note::
建议使用高层次的 API ``esp_partition`` 或者文件系统)而非低层次驱动 API 去访问 SPI NOR Flash 建议使用高层次的 API``esp_partition`` 或者文件系统)而非低层次驱动 API 去访问 SPI NOR Flash。
由于 NOR Flash 和乐鑫硬件的一些限制,访问主 Flash 会影响各个系统的性能。关于这些限制的更多信息,参见 :doc:`SPI Flash Documents </api-reference/peripherals/spi_flash/index>` 由于 NOR Flash 和乐鑫硬件的一些限制,访问主 flash 会影响各个系统的性能。关于这些限制的更多信息,参见 :doc:`SPI Flash Documents </api-reference/peripherals/spi_flash/index>`
.. toctree:: .. toctree::
:maxdepth: 1 :maxdepth: 1

View File

@ -109,7 +109,7 @@ NVS 加密:基于 HMAC 外设的方案
- 如果找到用于 :cpp:enumerator:`esp_efuse_purpose_t::ESP_EFUSE_KEY_PURPOSE_HMAC_UP` 的密钥,该密钥也会用于 XTS 加密密钥的生成。 - 如果找到用于 :cpp:enumerator:`esp_efuse_purpose_t::ESP_EFUSE_KEY_PURPOSE_HMAC_UP` 的密钥,该密钥也会用于 XTS 加密密钥的生成。
- 如果指定的 eFuse 块被 :cpp:enumerator:`esp_efuse_purpose_t::ESP_EFUSE_KEY_PURPOSE_HMAC_UP` 以外目的的密钥占用,则会引发错误。 - 如果指定的 eFuse 块被 :cpp:enumerator:`esp_efuse_purpose_t::ESP_EFUSE_KEY_PURPOSE_HMAC_UP` 以外目的的密钥占用,则会引发错误。
- 然后API :cpp:func:`nvs_flash_init` 使用 :component_file:`nvs_flash/include/nvs_flash.h` 提供的 :cpp:func:`nvs_flash_generate_keys_v2` API 函数,自动生成所需的 NVS 密钥。该密钥还可用于读取安全配置(参见 :cpp:func:`nvs_flash_read_security_cfg_v2` 并通过 :cpp:func:`nvs_flash_secure_init_partition` 初始化自定义的加密 NVS 分区。 - 然后API :cpp:func:`nvs_flash_init` 使用 :component_file:`nvs_flash/include/nvs_flash.h` 提供的 :cpp:func:`nvs_flash_generate_keys_v2` API 函数,自动生成所需的 NVS 密钥。该密钥还可用于读取安全配置(参见 :cpp:func:`nvs_flash_read_security_cfg_v2`)并通过 :cpp:func:`nvs_flash_secure_init_partition` 初始化自定义的加密 NVS 分区。
- API 函数 :cpp:func:`nvs_flash_secure_init`:cpp:func:`nvs_flash_secure_init_partition` 不会内部生成密钥。使用这些 API 函数初始化加密的 NVS 分区时,可在启动后用 API 函数 :cpp:func:`nvs_flash_generate_keys_v2` 生成密钥,或使用 :cpp:func:`nvs_flash_read_security_cfg_v2` 获取并填充 NVS 安全配置结构 :cpp:type:`nvs_sec_cfg_t`,将其输入到上述 API 中。 - API 函数 :cpp:func:`nvs_flash_secure_init`:cpp:func:`nvs_flash_secure_init_partition` 不会内部生成密钥。使用这些 API 函数初始化加密的 NVS 分区时,可在启动后用 API 函数 :cpp:func:`nvs_flash_generate_keys_v2` 生成密钥,或使用 :cpp:func:`nvs_flash_read_security_cfg_v2` 获取并填充 NVS 安全配置结构 :cpp:type:`nvs_sec_cfg_t`,将其输入到上述 API 中。

View File

@ -172,7 +172,7 @@ NVS 库在其操作中主要使用两个实体:页面和条目。页面是一
此时 flash 已完成初始化,页头部写入 flash页面已具备有效序列号。页面中存在一些空条目可写入数据。任意时刻至多有一个页面处于活跃状态。 此时 flash 已完成初始化,页头部写入 flash页面已具备有效序列号。页面中存在一些空条目可写入数据。任意时刻至多有一个页面处于活跃状态。
写满状态 写满状态
Flash 已写满键值对,状态不再改变。 flash 已写满键值对,状态不再改变。
用户无法向写满状态下的页面写入新键值对,但仍可将一些键值对标记为已擦除。 用户无法向写满状态下的页面写入新键值对,但仍可将一些键值对标记为已擦除。
擦除状态 擦除状态
@ -181,7 +181,7 @@ NVS 库在其操作中主要使用两个实体:页面和条目。页面是一
损坏状态 损坏状态
页头部包含无效数据,无法进一步解析该页面中的数据,因此之前写入该页面的所有条目均无法访问。相应的 flash 扇区并不会被立即擦除,而是与其他处于未初始化状态的扇区一起等待后续使用。这一状态可能对调试有用。 页头部包含无效数据,无法进一步解析该页面中的数据,因此之前写入该页面的所有条目均无法访问。相应的 flash 扇区并不会被立即擦除,而是与其他处于未初始化状态的扇区一起等待后续使用。这一状态可能对调试有用。
Flash 扇区映射至逻辑页面并没有特定的顺序NVS 库会检查存储在 flash 扇区的页面序列号,并根据序列号组织页面。 flash 扇区映射至逻辑页面并没有特定的顺序NVS 库会检查存储在 flash 扇区的页面序列号,并根据序列号组织页面。
:: ::

View File

@ -68,7 +68,7 @@ ESP-IDF :example:`storage/sd_card` 目录下提供了 SDMMC 驱动与 FatFs 库
1. I/O 中止 (0x06) 寄存器:在该寄存器中设置 RES 位可重置卡的 IO 部分; 1. I/O 中止 (0x06) 寄存器:在该寄存器中设置 RES 位可重置卡的 IO 部分;
2. 总线接口控制 (0x07) 寄存器:如果主机和插槽配置中启用 4 线模式,则驱动程序会尝试在该寄存器中设置总线宽度字段。如果字段设置成功,则从机支持 4 线模式,主机也切换至 4 线模式; 2. 总线接口控制 (0x07) 寄存器:如果主机和插槽配置中启用 4 线模式,则驱动程序会尝试在该寄存器中设置总线宽度字段。如果字段设置成功,则从机支持 4 线模式,主机也切换至 4 线模式;
3. 高速0x13寄存器:如果主机配置中启用高速模式,则该寄存器的 SHS 位会被设置。 3. 高速 (0x13) 寄存器:如果主机配置中启用高速模式,则该寄存器的 SHS 位会被设置。
注意,驱动程序不会在 (1) I/O 使能寄存器和 Int 使能寄存器,及 (2) I/O 块大小中,设置任何位。应用程序可通过调用 :cpp:func:`sdmmc_io_write_byte` 来设置相关位。 注意,驱动程序不会在 (1) I/O 使能寄存器和 Int 使能寄存器,及 (2) I/O 块大小中,设置任何位。应用程序可通过调用 :cpp:func:`sdmmc_io_write_byte` 来设置相关位。

View File

@ -69,7 +69,7 @@ Linenoise 库不需要显式地初始化,但是在调用行编辑函数之前
- :cpp:func:`linenoiseSetCompletionCallback` - :cpp:func:`linenoiseSetCompletionCallback`
当用户按下制表键时, linenoise 会调用 **补全回调函数** ,该回调函数会检查当前已经输入的内容,然后调用 :cpp:func:`linenoiseAddCompletion` 函数来提供所有可能的补全后的命令列表。启用补全功能,需要事先调用 :cpp:func:`linenoiseSetCompletionCallback` 函数来注册补全回调函数。 当用户按下制表键时linenoise 会调用 **补全回调函数** ,该回调函数会检查当前已经输入的内容,然后调用 :cpp:func:`linenoiseAddCompletion` 函数来提供所有可能的补全后的命令列表。启用补全功能,需要事先调用 :cpp:func:`linenoiseSetCompletionCallback` 函数来注册补全回调函数。
``console`` 组件提供了一个现成的函数来为注册的命令提供补全功能 :cpp:func:`esp_console_get_completion` (见下文)。 ``console`` 组件提供了一个现成的函数来为注册的命令提供补全功能 :cpp:func:`esp_console_get_completion` (见下文)。
@ -79,7 +79,7 @@ Linenoise 库不需要显式地初始化,但是在调用行编辑函数之前
- :cpp:func:`linenoiseSetHintsCallback` - :cpp:func:`linenoiseSetHintsCallback`
每当用户的输入改变时, linenoise 就会调用此回调函数,检查到目前为止输入的命令行内容,然后提供带有提示信息的字符串(例如命令参数列表),然后会在同一行上用不同的颜色显示出该文本。 每当用户的输入改变时linenoise 就会调用此回调函数,检查到目前为止输入的命令行内容,然后提供带有提示信息的字符串(例如命令参数列表),然后会在同一行上用不同的颜色显示出该文本。
- :cpp:func:`linenoiseSetFreeHintsCallback` - :cpp:func:`linenoiseSetFreeHintsCallback`

View File

@ -81,7 +81,7 @@ Light-sleep 模式下的 ``esp_timer``
通过在 Light-sleep 模式前调用函数 :cpp:func:`esp_timer_stop` 可以改变上述行为。但在某些情况下这可能并不方便。比起使用停止函数,在 :cpp:func:`esp_timer_create` 中使用 ``skip_unhandled_events`` 选项将更加便利。 当 ``skip_unhandled_events`` 为真时,如果一个周期性定时器在 Light-sleep 期间超时一次或多次,那么在唤醒时只有一个回调会被调用。 通过在 Light-sleep 模式前调用函数 :cpp:func:`esp_timer_stop` 可以改变上述行为。但在某些情况下这可能并不方便。比起使用停止函数,在 :cpp:func:`esp_timer_create` 中使用 ``skip_unhandled_events`` 选项将更加便利。 当 ``skip_unhandled_events`` 为真时,如果一个周期性定时器在 Light-sleep 期间超时一次或多次,那么在唤醒时只有一个回调会被调用。
使用带有自动 Light-sleep 的 ``skip_unhandled_events`` 选项(请参阅 :doc:`电源管理 <power_management>`),有助于在系统处于 Light-sleep 状态时降低功耗。 Light-sleep 的持续时间也在一定程度上由下一个事件发生的时间确定。具有 ``skip_unhandled_events``` 选项的定时器不会唤醒系统。 使用带有自动 Light-sleep 的 ``skip_unhandled_events`` 选项(请参阅 :doc:`电源管理 <power_management>`),有助于在系统处于 Light-sleep 状态时降低功耗。Light-sleep 的持续时间也在一定程度上由下一个事件发生的时间确定。具有 ``skip_unhandled_events``` 选项的定时器不会唤醒系统。
处理回调 处理回调
------------------ ------------------

View File

@ -184,7 +184,7 @@ ESP-IDF 提供了 :cpp:func:`esp_efuse_mac_get_custom` 函数,从 eFuse 读取
内部调用函数 :cpp:func:`esp_derive_local_mac`,可从全局 MAC 地址生成本地 MAC 地址。具体流程如下: 内部调用函数 :cpp:func:`esp_derive_local_mac`,可从全局 MAC 地址生成本地 MAC 地址。具体流程如下:
1. 在全局 MAC 地址的第一个字节组中设置 U/L 位(位值为 0x2创建本地 MAC 地址。 1. 在全局 MAC 地址的第一个字节组中设置 U/L 位(位值为 0x2创建本地 MAC 地址。
2. 如果该位已存在于全局 MAC 地址中(即现有的 “全局” MAC 地址实际上已经是本地 MAC 地址),则本地 MAC 地址的第一个字节组与 0x4 异或。 2. 如果该位已存在于全局 MAC 地址中即现有的“全局”MAC 地址实际上已经是本地 MAC 地址),则本地 MAC 地址的第一个字节组与 0x4 异或。
芯片版本 芯片版本
------------ ------------

View File

@ -92,7 +92,7 @@ ESP-IDF 中集成的电源管理算法可以根据应用程序组件的需求,
启用动态调频后APB 频率可在一个 RTOS 滴答周期内多次更改。有些外设不受 APB 频率变更的影响但有些外设可能会出现问题。例如Timer Group 外设定时器会继续计数,但定时器计数的速度将随 APB 频率的变更而变更。 启用动态调频后APB 频率可在一个 RTOS 滴答周期内多次更改。有些外设不受 APB 频率变更的影响但有些外设可能会出现问题。例如Timer Group 外设定时器会继续计数,但定时器计数的速度将随 APB 频率的变更而变更。
时钟频率不受 APB 频率影响的外设时钟源通常有 ``REF_TICK``, ``XTAL``, ``RC_FAST`` (i.e. ``RTC_8M``)。因此,为了保证外设在 DFS 期间的所有行为一致,建议在上述时钟中选择其一作为外设的时钟源。如果想要了解更多详情可以浏览每个外设 ”API 参考 > 外设 API“ 页面的 “电源管理” 章节。 时钟频率不受 APB 频率影响的外设时钟源通常有 ``REF_TICK``, ``XTAL``, ``RC_FAST`` (i.e., ``RTC_8M``)。因此,为了保证外设在 DFS 期间的所有行为一致,建议在上述时钟中选择其一作为外设的时钟源。如果想要了解更多详情可以浏览每个外设 ”API 参考 > 外设 API“ 页面的 “电源管理” 章节。
目前以下外设驱动程序可感知动态调频,并在调频期间使用 ``ESP_PM_APB_FREQ_MAX`` 锁: 目前以下外设驱动程序可感知动态调频,并在调频期间使用 ``ESP_PM_APB_FREQ_MAX`` 锁:

View File

@ -346,7 +346,7 @@ RTC 外设和内存断电
flash 断电 flash 断电
^^^^^^^^^^ ^^^^^^^^^^
默认情况下,调用函数 :cpp:func:`esp_light_sleep_start` 后, flash **不会** 断电,因为在 sleep 过程中断电 flash 存在风险。具体而言flash 断电需要时间,但是在此期间,系统有可能被唤醒,导致 flash 重新被上电。此时,断电尚未完成又重新上电的硬件行为有可能导致 flash 无法正常工作。 默认情况下,调用函数 :cpp:func:`esp_light_sleep_start`flash **不会** 断电,因为在 sleep 过程中断电 flash 存在风险。具体而言flash 断电需要时间,但是在此期间,系统有可能被唤醒,导致 flash 重新被上电。此时,断电尚未完成又重新上电的硬件行为有可能导致 flash 无法正常工作。
理论上讲,在 flash 完全断电后可以仅唤醒系统,然而现实情况是 flash 断电所需的时间很难预测。如果用户为 flash 供电电路添加了滤波电容,断电所需时间可能会更长。此外,即使可以预知 flash 彻底断电所需的时间,有时也不能通过设置足够长的睡眠时间来确保 flash 断电的安全(比如,突发的异步唤醒源会使得实际的睡眠时间不可控)。 理论上讲,在 flash 完全断电后可以仅唤醒系统,然而现实情况是 flash 断电所需的时间很难预测。如果用户为 flash 供电电路添加了滤波电容,断电所需时间可能会更长。此外,即使可以预知 flash 彻底断电所需的时间,有时也不能通过设置足够长的睡眠时间来确保 flash 断电的安全(比如,突发的异步唤醒源会使得实际的睡眠时间不可控)。

View File

@ -15,9 +15,9 @@
**贡献者** 是指向乐鑫提交贡献的个人版权所有者,本文档中称“贡献者”或“您”。如果您以雇员身份提交贡献,且该贡献属于您的部分工作内容,您的雇主须已批准此协议,或作为实体签署此协议。 **贡献者** 是指向乐鑫提交贡献的个人版权所有者,本文档中称“贡献者”或“您”。如果您以雇员身份提交贡献,且该贡献属于您的部分工作内容,您的雇主须已批准此协议,或作为实体签署此协议。
**贡献** 是指您向乐鑫提交的、您拥有版权的原创作品(软件和(或)文档),包括对既有工作进行的任何修改或补充。如果您没有该原创作品的完整版权,请在 GitHub 上向乐鑫提交评论。 **贡献** 是指您向乐鑫提交的、您拥有版权的原创作品(软件/文档),包括对既有工作进行的任何修改或补充。如果您没有该原创作品的完整版权,请在 GitHub 上向乐鑫提交评论。
**版权** 是指在原创作品的整个存续期内(包括许可的延期),保护您所拥有或控制的原创作品的所有权利,包括版权、精神权、邻接权等,视具体情况而定。 **版权** 是指在原创作品的整个存续期内(包括许可的延期),保护您所拥有或控制的原创作品的所有权利,包括版权、精神权、邻接权等,视具体情况而定。
**材料** 是指乐鑫向第三方提供的软件或文档。当本协议涉及多个软件项目时,材料指您的贡献内容所提交到的软件或文档。在您提交贡献后,此贡献可能被包含在材料中。 **材料** 是指乐鑫向第三方提供的软件或文档。当本协议涉及多个软件项目时,材料指您的贡献内容所提交到的软件或文档。在您提交贡献后,此贡献可能被包含在材料中。

View File

@ -337,7 +337,7 @@ pytest 执行步骤
.. note:: .. note::
这里的 ``app_path`` 应设置为绝对路径。 Python 中的 ``__file__`` 宏会返回测试脚本自身的绝对路径。 这里的 ``app_path`` 应设置为绝对路径。Python 中的 ``__file__`` 宏会返回测试脚本自身的绝对路径。
用不同应用程序和目标芯片进行多目标测试 用不同应用程序和目标芯片进行多目标测试
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -67,7 +67,7 @@
.. attention:: .. attention::
如果使用的是 ESP32-DevKitC板载 ESP32-SOLO-1 模组)或 ESP32-DevKitM-1板载 ESP32-MINI-1(1U) 模组),请在烧写示例程序前,前往 ``menuconfig`` 中使能单核模式:ref:`CONFIG_FREERTOS_UNICORE` 如果使用的是 ESP32-DevKitC板载 ESP32-SOLO-1 模组)或 ESP32-DevKitM-1板载 ESP32-MINI-1(1U) 模组),请在烧写示例程序前,前往 ``menuconfig`` 中使能单核模式 (:ref:`CONFIG_FREERTOS_UNICORE`)
.. note:: .. note::
@ -93,4 +93,3 @@
``USB CDC`` ``USB CDC``
3. 保存设置,退出 ``menuconfig`` 界面。 3. 保存设置,退出 ``menuconfig`` 界面。

View File

@ -9,7 +9,7 @@
使用脚本安装 ESP-IDF 工具 使用脚本安装 ESP-IDF 工具
==================================== ====================================
请从 Windows “命令提示符”窗口,切换至 ESP-IDF 的安装目录。然后运行:: 请从 Windows“命令提示符”窗口切换至 ESP-IDF 的安装目录。然后运行::
install.bat install.bat

View File

@ -33,7 +33,7 @@ ESP32-Ethernet-Kit V1.2 入门指南
ESP32-Ethernet-Kit 是一款来自 `乐鑫 <https://espressif.com>`_ 的开发板。 ESP32-Ethernet-Kit 是一款来自 `乐鑫 <https://espressif.com>`_ 的开发板。
它由 :ref:`以太网母板A板)<get-started-esp32-ethernet-kit-a-v1.2-layout>` 和 `PoE 子板B 板)`_ 两部分组成。其中 :ref:`以太网母板A板)<get-started-esp32-ethernet-kit-a-v1.2-layout>` 集成蓝牙/Wi-Fi 双模 ESP32-WROVER-E 模组和单端口 10/100 Mbps 快速以太网收发器 (PHY) IP101GRI。`PoE 子板B 板)`_ 提供以太网供电功能。ESP32-Ethernet-Kit 的 A 板可在不连接 B 板的情况下独立工作。 它由 :ref:`以太网母板A 板)<get-started-esp32-ethernet-kit-a-v1.2-layout>` 和 `PoE 子板B 板)`_ 两部分组成。其中 :ref:`以太网母板A 板)<get-started-esp32-ethernet-kit-a-v1.2-layout>` 集成蓝牙/Wi-Fi 双模 ESP32-WROVER-E 模组和单端口 10/100 Mbps 快速以太网收发器 (PHY) IP101GRI。`PoE 子板B 板)`_ 提供以太网供电功能。ESP32-Ethernet-Kit 的 A 板可在不连接 B 板的情况下独立工作。
.. _get-started-esp32-ethernet-kit-v1.2: .. _get-started-esp32-ethernet-kit-v1.2:
@ -384,7 +384,7 @@ ESP32-Ethernet-Kit 上电前,请首先确认开发板完好无损。
针对 ESP32-Ethernet-Kit V1.1 的主要修改 针对 ESP32-Ethernet-Kit V1.1 的主要修改
----------------------------------------- -----------------------------------------
* 更正拨码开关周围 GPIO 编号丝印。 * 更正拨码开关周围 GPIO 编号丝印。
* C1、C2、C42 和 C43 更新为 20 pF。详细信息见 `ESP32-Ethernet-Kit V1.2 以太网母板A 板)原理图`_ * C1、C2、C42 和 C43 更新为 20 pF。详细信息见 `ESP32-Ethernet-Kit V1.2 以太网母板A 板)原理图`_
* 模组 ESP32-WROVER-B 替换为 ESP32-WROVER-E。 * 模组 ESP32-WROVER-B 替换为 ESP32-WROVER-E。

View File

@ -218,7 +218,7 @@ ESP32-S2-DevKitM-1 的主要组件和连接方式如下图所示。
排针 排针
---- ----
下表列出了开发板两侧排针J1 和 J3**名称****功能**,排针的名称如图 :ref:`user-guide-devkitm-1-v1-board-front` 所示,排针的序号与 `ESP32-S2-DevKitM-1 原理图 <https://dl.espressif.com/dl/schematics/ESP32-S2-DevKitM-1_V1_Schematics.pdf>`_ (PDF)一致。 下表列出了开发板两侧排针J1 和 J3**名称****功能**,排针的名称如图 :ref:`user-guide-devkitm-1-v1-board-front` 所示,排针的序号与 `ESP32-S2-DevKitM-1 原理图 <https://dl.espressif.com/dl/schematics/ESP32-S2-DevKitM-1_V1_Schematics.pdf>`_ (PDF) 一致。
J1 J1

View File

@ -13,7 +13,7 @@ ESP-IDF 编程指南
.. only:: html .. only:: html
本文档仅包含针对 {IDF_TARGET_NAME} 芯片的 ESP-IDF 使用。如需了解其他芯片,请在页面左上方的下拉菜单中选择的目标芯片。 本文档仅包含针对 {IDF_TARGET_NAME} 芯片的 ESP-IDF 使用。如需了解其他芯片,请在页面左上方的下拉菜单中选择的目标芯片。
.. only:: latex .. only:: latex

View File

@ -51,7 +51,7 @@ ESP-IDF v4.x 版本中已不再使用以下组件,这些组件已弃用:
.. note:: .. note::
不再支持 ``esp_adc_cal`` 组件。 新的 adc 校准驱动在 ``esp_adc`` 组件中。旧版 adc 校准驱动已被迁移进 ``esp_adc`` 组件中。 要使用旧版 ``esp_adc_cal`` 驱动接口,你应该在 CMakeLists.txt 文件的组件依赖列表中增加 esp_adc 。更多细节请查看 :doc:`Peripherals Migration Guide </migration-guides/release-5.x/5.0/peripherals>` 不再支持 ``esp_adc_cal`` 组件。 新的 adc 校准驱动在 ``esp_adc`` 组件中。旧版 adc 校准驱动已被迁移进 ``esp_adc`` 组件中。 要使用旧版 ``esp_adc_cal`` 驱动接口,你应该在 CMakeLists.txt 文件的组件依赖列表中增加 esp_adc。更多细节请查看 :doc:`Peripherals Migration Guide </migration-guides/release-5.x/5.0/peripherals>`
版本更新后无需目标组件,因此以下目标组件也已经从 ESP-IDF 中删除: 版本更新后无需目标组件,因此以下目标组件也已经从 ESP-IDF 中删除:

View File

@ -251,7 +251,7 @@ Git 工作流
更多详情,请前往 GitHub 查看完整 `标签列表`_ 更多详情,请前往 GitHub 查看完整 `标签列表`_
例如,在 Linux 或 macOS 系统中可以运行以下命令更新至ESP-IDF v3.1,随时关注该分支上的 Bugfix 版本发布(如 ``v3.1.1`` 等): 例如,在 Linux 或 macOS 系统中,可以运行以下命令更新至 ESP-IDF v3.1,随时关注该分支上的 Bugfix 版本发布(如 ``v3.1.1`` 等):
.. code-block:: bash .. code-block:: bash