外设

[English]


SDIO 最⾼速度能⽀持到多少?

SDIO 时钟能到 50 MHz, 理论最⾼速度是 200 Mbps。


使⽤ ESP32 做触摸相关应⽤时,哪⾥有相关资料可参考?

请参考推荐的 软硬件设计


ESP-WROOM-02D 模块是否可以外接 SPI flash?

ESP-WROOM-02D 有空闲 SPI 外设,可外接 SPI flash,用以存储数据。


ESP-WROOM-S2 作为从机,STM32 作为 MCU ,可以使⽤ SPI 接⼝下载吗?

不可以,默认下载功能仅支持串口 UART0,固件启动后可应用中使能其他外设,在应用中⾃⾏设计⽀持 OTA 功能。


ESP8266 的 SDIO 是否⽀持 SD 卡?

ESP8266 是 SDIO Slave,不⽀持 SD 卡。


ESP8266 是否支持 I2C slave 模式?

不支持,如果要使用此功能,推荐使用 ESP32 或者 ESP32-S2 芯片。ESP32 参考示例:i2C_self_test


ESP32 管脚配置需要注意什么?

ESP32 系列模组分为 ESP32-WROOM 系列和 ESP32-WROVER 系列,GPIO 使用配置注意事项如下。

WROOM-32/32D/32U 系列共有 26 个 pin 脚可供客户使用,注意事项如下:

  • GPIO6 ~ GPIO11 被内置 flash 占用,不可用做它用;

  • GPIO34、35、36 和 39 为 input only pin 脚,不具备 output 能力;

  • ESP32 内置 GPIO 矩阵,部分外设接口可以配置到任意空闲 pin 脚上。即硬件设计时,不需要严格将某些功能固定在某些 pin 脚上。

详细信息可以参考 《ESP32 技术规格书》 中表格 9 的内容。

WROVER/WROVER-I/WROVER-B/WROVER-IB 共有 24 个 pin 脚可供客户使用,注意事项如下:

  • GPIO6 ~ GPIO11 被内置 flash 占用,不可用做它用;

  • GPIO34、35、36 和 39 为 input only pin 脚,不具备 output 能力;

  • WROVER 系列模组中,GPIO12 由于在模组内部被上拉,不建议用做触摸传感功能;

  • ESP32 内置 GPIO 矩阵,部分外设接口可以配置到任意空闲 pin 脚上。即硬件设计时,不需要严格将某些功能固定在某些 pin 脚上。

详细信息可以参考 《ESP32 技术规格书》 中表格 9 的内容。

ESP32 有 3 组 UART,但下载只可使用 UART0,且 pin 脚固定。


ESP32 是否支持 A2DP 发送音频?

ESP32 支持 A2DP 发送音频,可参考例程 a2dp_source


ESP8266 I2C 是软件模拟的吗?

ESP8266 I2C 是使用 GPIO 软件模拟。


使用 ESP8266 NonOS v3.0 版本的 SDK,如下报错是什么原因?

E:M 536    E:M 1528

以 E:M 开头的 log 是内存不足的原因。


ESP8266 PWM 频率范围是多少呢?

ESP8266 PWM 是软件模拟的,受定时器限制 CLK 最大为 1 M。推荐频率为 1 K,也可以通过降低占空比分辨率的方式提高频率。


ESP32 GPIO 管脚输出 PWM 存在限制吗?

ESP32 PWM 可通过 IO Matrix 切换至任意 GPIO 输出。但是由于 GPIO34 ~ GPIO39 仅为输入模式,故不支持做 PWM 输出。


ESP32-S2 Touch Sensor 的防水功能是在有水时屏蔽 Touch 还是有水时仍然能识别 Touch 事件?

当水对触摸传感器的影响较小时(水珠),传感器会主动适应;当水对触摸传感器的影响较大时(水流),传感器可通过软件配置来选择锁定某些传感器通道的状态来避免水的影响。


ESP32-S2 Touch Sensor 的防水流功能在屏蔽有水流的 Touchpad 时,是否能够保持未沾水的 Pad 仍能使用?

可以,可通过软件选择具体屏蔽的通道。


是否有推荐的可以用于 Touch Sensor 测试、稳定触发 Touch Sensor 并且参数与人手触摸时参数接近的材料?

对一致性要求较高的实验,可使用手机电容笔来替代人手进行测试。


Touch Sensor 的 Pin 能否重映射?

不能,因为 Touch Sensor 属于模拟信号处理。


在覆盖亚克力板后,Touch Sensor 检测阈值是否需要重新设置?

需要重新设置一个阈值。


Touch Sensor 能否检测是否有亚克力板覆盖,以便在添加或移除亚克力板时,自动切换预设定的检测阈值?

暂时不能自动适应覆盖层物理参数变化所带来的影响。


ESP32 SD 卡支持的最大容量是多少?

  • SD3.01 规范中 SDXC 的卡最大支持 2 TB (2048 GB) 容量。

  • ESP32 的 SDMMC Host 符合 SD3.01 协议,通过该外设可以访问最多 2 TB 的区域;使用 SDSPI 驱动通过 SPI 总线访问卡时,硬件也支持访问 2 TB 的区域。

  • 在软件层面上,卡能使用的空间还受文件系统的影响。


ESP32 是否支持 USB 功能?

  • ESP32 不支持 USB 功能。

  • ESP32-S2 支持 USB1.1。


ESP8266 使⽤ HW timer 中断有哪些注意事项?

  • 可以参考相关 API 文档 《ESP8266 技术参考手册》

  • 如果使用 NonOS SDK,可参考 《ESP8266 Non-OS SDK API 参考》

  • 通常情况下,硬件中断需要尽快执行结束,并且将回调函数放入 IRAM 中,避免 Cache 影响。

    • RTOS SDK 需要函数去添加 IRAM_ATTR。

    • NonOS SDK 不能在函数前添加 ICACHE_FLASH_ATTR。


ESP32 脉冲宽度调制 (PWM) 信号是否可以分配任意一个 I/O 上?

  • 除了只有输⼊功能的 I/O(例如:GPIO34 ~ GPIO39)之外,理论上 PWM 可以输出到任何管脚。

  • 实际使用中仍会受到模组与芯片限制、模组未引出管脚或 flash 占用等情况影响。


ESP32 是否有 I2S 驱动 LCD 的参考代码?

I2S LCD Driver:esp-iot-solution i2s_devices


使用 ESP8266 RTOS v2.1 以及之前版本 SDK,如何将 LOG 配置到 UART1?

在配置 UART1 初始化后,可以通过 API 切换 LOG 输出到 UART1。

UART_SetPrintPort(UART1);

使用 ESP8266 RTOS v3.0 以及之后的 SDK,如何将 LOG 配置到 UART1 ?

可通过 menuconfig -> Component config -> ESP8266-specific -> UART for console output -> custom -> UART peripheral to use for console output -> UART0 修改为 UART1 接口。


ESP32 IDF 中如何使能 UART 流控?


ESP8266 NonOS SDK PWM 的变化缓慢,有哪些原因?

  • 如果使用 SDK example/IOT_demo 中的渐变 API,如 light_set_aim 或 light_set_aim_r 这些 API,需要渐变的过程。

  • 若需要 PWM Duty 设置后⽴即⽣效,则可以调⽤接⼝ pwm_set_duty,需要注意调⽤ pwm_set_duty 后要调⽤ pwm_start 此次设置才能⽣效。


ESP8266 部分 GPIO 出现高电平的原因是什么?

  • 根据硬件设计,部分 GPIO 存在默认上下拉状态,所以在系统初始化时,该管脚的电平状态不受程序控制,所以会出现程序在引导过程中部分 GPIO 电平不正确。

  • 如果需要使用这些 GPIO ,硬件上建议外接器件与默认上下拉电平一致,软件可以在 bootloader 过程中调整电平状态,软件方法也会存在短暂电平异常。


ESP8266 ADC 的精度如何?

  • ESP8266 ADC 为 10 bit, 理论精度为 2 10 = 1024。

  • ESP8266 连接路由器后,单 STA 模式会进⼊ Modem-sleep 模式,导致芯⽚内部参考值变化,因此 ADC 测量得数据变化。

  • 如果想要测量精确,可以在关闭 Wi-Fi 后,使用 system_adc_fast_read 函数读取。


ESP8266 如何获取 ADC 寄存器 Bitmap 信息?

由于 ESP8266 ADC 是和内部 RF 电路⾼度集成的,所以 Bitmap 和寄存器信息没有公开,如有特殊需求请联系 sales@espressif.com


ESP32 ADC 有⼏个通道?采样率和有效位数是多少?

  • ESP32 的 ADC 共有 18 个通道。

  • 在停⽌ Wi-Fi 的情况下,采样率能达到每秒 100000 次。

  • 在 Wi-Fi 正常⼯作的情况下,能达到每秒 1000 次。

  • ADC 内部有效位数为 12 位。


ESP32 是否可以关闭线程调度使用一个单独的 CPU 以实现实时 GPIO?

  • 目前 SDK 没有相关的配置选择供 CPU1 单独运行,两个核心只支持 SMP,不支持 AMP。

  • 解决输出波形被打断的问题有以下解决方案:

    • 使用硬件的信号输出,选择相关数字协议实现 SPI、I2C、I2S 等,特殊用法 SPI 取信号输出线产生波形。

    • 硬件 RMT 是否可以产生想要的波形,并达到足够的长度。

    • 硬件中断中产生相应波形,需要将所有回调放入 IRAM 中。

    • 可以利用芯片中的协处理器,它可以当作无操作系统的单片机,但目前只支持汇编语言。


ESP32 Touch 应用有哪些参考资料?

ESP32 touch 应用可以参考 Touch 软硬件设计


ESP32 SD 卡是否可以与 flash & PSRAM 共同使用?

  • 可以共同使用。

  • ESP32 flash & PSRAM 与 SD 卡使用的不是同一组 SDIO。


ESP32 使用 UART0 作为通信串口,有哪些?

  • 通常情况下不建议将 UART0 作为普通的通信串口,因为 UART0 为设备默认 LOG 输出串口。

  • 若 ESP32 的 UART 不够用,或者硬件设计已经不方便更改的情况下,如果您要使用 UART0 作为普通的通信串口,请参考以下建议:

软件方面:防止打印影响串口通信,默认程序中 UART0 主要有三处打印设置。

  • 第一处是上电 ROM 打印,上电时可将 MTDO pin 设为低电平屏蔽上电 ROM 打印。

  • 第二处是 bootloader log 信息输出,您可以将 menuconfig -> Bootloader config -> Bootloader log verbosity 设置为 No output 来屏蔽 bootloader log 输出。

  • 第三处是 app log 信息输出,您可以将 menuconfig -> Component config -> Log output -> Default log verbosity 设置为 No output 来屏蔽 app log 输出。

硬件方面

  • 在下载程序的时候,注意防止 UART0 上有其它设备,如果有其它设备可能会影响程序的下载。建议在 ESP32 和其它设备之间预留一个 0 Ω 电阻,如果下载有问题可以断开这个 0 Ω 电阻。


ESP32-SOLO-1 的 GPIO34 ~ GPIO39 是否可作为 UART 的 RX 及 TWAI® 的 RX 信号管脚?

GPIO34 ~ GPIO39 仅作为接收,可作为 UART 的 RX 及 TWAI 的 RX 信号管脚。


使用 ESP-WROOM-S2 模组,是否支持 SDIO 作从机?

ESP-WROOM-S2 的 flash 使用的是 SPI 的接口,故支持 SDIO 作从机。


ESP32 是否支持使用晶振作为 I2S 的时钟源?

ESP32 不支持使用晶振作为 I2S 的时钟源,可阅读 《ESP32 技术参考手册》 来了解 I2S 的时钟源配置。


使用 ESP8266 调用 adc_read_fast() API 会导致 Wi-Fi 断连吗?

  • 调用 adc_read_fast() API 前需要将 Wi-Fi 和中断关闭,可参见此 API 的 使用说明

  • 由于 adc_read_fast() API 会进行连续采集,ADC 内部与 Wi-Fi RF 存在耦合部分,无法在 Wi-Fi 开启的状态下调用该函数。

  • 在 Wi-Fi 开启的时候请使用 adc_read() API 进行 ADC 采集。为保证数据稳定,需要使用 esp_wifi_set_ps(WIFI_PS_NONE); 函数关闭 Wi-Fi Modem-sleep 休眠模式。

注解

ADC 采样率:在停⽌ Wi-Fi 的情况下,能达到每秒 100000 次。Wi-Fi 正常⼯作的情况下,能达到每秒 1000 次。


使用 ESP32 如何动态修改串口波特率并立即生效?

请使用 uart_set_baudrate() API 来修改 UART 波特率。参见 API 说明


ESP32-S2 取消了 SDIO 接口,是否还支持外接 TF 卡?

ESP32-S2 有 4 组 SPI 的接口,可使用 SPI2/SPI3 的接口外接 TF 卡,当使用 SPI2/SPI3 的接口外接 TF 卡时,SPI 应设为通用 SPI 模式。


ESP32 GPIO 电平翻转速度是多少?

GPIO 电平翻转大约耗时 300 ns。


ESP32 如何连接 MIC?

  • 如果连接数字 MIC ,可以连接 I2S 外设。

  • 如果连接模拟 MIC ,可以连接 ADC 外设。


ESP32 是否支持模拟音频或是数字音频输出?

  • ESP32 支持 DAC 模拟音频输出,可以使用它播放提示音等简单音频。但是如果用它播放音乐,音乐效果不是很好。

  • ESP32 同时支持 I2S 数字音频输出,I2S 可配置引脚可以在 《ESP32 技术规格书》 第四章查看。


ESP32 中 SPI/HSPI/VSPI 三者有什么区别呢?

  • 并行 QSPI 接口中 SPI/HSPI/VSPI 是连接外部 flash 的分组,默认 flash 挂载在 SPI 分组上。

  • 驱动中可以任意调用的 HSPI/VSPI 均为通用 SPI,名称中的差异仅用以分组之间的区分。


ESP32 当⼀些 RTC 外设的电源打开时(SARADC1、SARADC2、AMP、HALL 传感器),GPIO36 和 GPIO39 的数字输⼊会被拉低约 80 ns,如何解决?

当⽤户决定把⽤于控制以上传感器的电源域打开时,应当忽略来⾃ GPIO36 和 GPIO39 的输⼊。


ESP32 LEDC 递减渐变,Duty 值溢出错误,如何解决?

使⽤ LEDC 的过程中,应避免以下三个条件同时成⽴:

  • LEDC 启动递减渐变功能;

  • LEDC 渐变过程中 Scale 寄存器设置为 1;

  • LEDC 递减渐变开始时刻或者过程中的某⼀时刻,Duty 值为 2 LEDC_HSTIMERx_DUTY_RES 或 2 LEDC_LSTIMERx_DUTY_RES


ESP32 当 TWAI® 控制器处于复位模式(即 RESET_MODE 位置 1 或由于总线关闭)或总线关闭恢复状态时,接收错误计数器 (REC) 的数值仍会变化,如何解决?

进⼊复位模式时,应将 LISTEN_ONLY_MODE 置位,此时 REC 数值不会变化。退出复位模式前或总线关闭恢复完成时,再恢复正常的操作模式。


ESP32 当 TWAI® 控制器处于总线关闭恢复过程中时,必须等待总线上出现 128 次总线空闲信号(连续 11 个隐性位),才能再次进⼊主动错误状态,如何解决?

在总线关闭恢复过程中,错误报警限制中断并不⼀定指示恢复过程已完成。⽤户需检查 STATUS_NODE_BUS_OFF 位来验证恢复过程是否完成。


ESP32 总线关闭恢复完成后,TWAI® 控制器下⼀次发送的数据可能出错(即不符合 TWAI 数据帧格式),如何解决?

⼀旦通过错误报警限制中断检测到总线关闭恢复完成,TWAI 控制器应先进⼊复位模式来复位控制器的内部信号,随后退出复位模式。


ESP32 TWAI® 接收到错误的数据帧可能导致下⼀次接收到的数据字节⽆效,如何解决?

⽤户可以通过置位 INTERRUPT_BUS_ERR_INT_ENA 并在接收到总线错误中断时,读取 ERROR_CODE_CAPTURE_REG 来检测错误类型及错误位置。如果符合错误产⽣条件(在数据段或 CRC 字段发⽣位错误或填充错误),可以采⽤以下两种解决⽅法:

  • TWAI 控制器可以发送 0 字节的空数据帧来复位 TWAI 控制器的内部信号。建议给空数据帧分配⼀个不会被任何 TWAI 总线上的节点接收的 ID。

  • 硬件复位 TWAI 控制器(需要保存并恢复当前寄存器的数值)。


ESP32 如果多个 GPIO 管脚配置了沿中断,则硬件可能⽆法正确触发中断。如何解决?

  • 解决⽅法 1:

    • 要实现 GPIO 的上升沿中断,按照下⾯的步骤实现:

      1. 配置 GPIO 的中断类型为⾼;

      2. 配置 CPU 的中断类型为 edge;

      3. CPU 的中断服务响应后,把 GPIO 的中断类型改为低。此时会发⽣第⼆次中断,需要 CPU 忽略这次中断服务程序。

    • 同理,要实现 GPIO 的下降沿中断,则按如下步骤进⾏配置:

      1. 配置 GPIO 的中断类型为低;

      2. 配置 CPU 的中断类型为 edge;

      3. CPU 的中断服务响应后,把 GPIO 的中断类型改为⾼。此时会发⽣第⼆次中断,需要 CPU 忽略这次中断服务程序。

  • 解决⽅法 2:

    假设 GPIO0 ~ GPIO31 为 Group1,GPIO32 ~ GPIO39 为 Group2,则:

    • ⼀个 group 中同时只能有⼀个沿中断;如果有⼀个沿中断,则不能有电平中断。

    • ⼀个 group 中如果没有沿中断,则可以有多组电平中断。


ESP8266 可以实现脉冲计数吗?

  • ESP8266 未包含硬件脉冲计数模块,所以仅支持通过 GPIO 上升沿或下降沿中断实现脉冲计数。

  • ESP8266 芯片中 Wi-Fi 开启后由于优先级太高可能会导致 GPIO 采样出现真空,中断采集的计数丢数据。

  • 综上,在计数要求较为严格的场景推荐使用 ESP32 以及后续推出的芯片。