外设驱动

[English]

公共变化

所有驱动的 io_loop_back 配置已被移除

不同的驱动对象可以共享同一个 GPIO 编号,联合起来可以实现更加复杂的功能。比如将 RMT 外设的 TX 通道和 RX 通道绑定在同一个 GPIO 上,进而模拟单总线的读写时序。在以前的版本中,你需要在驱动的配置中额外设置 io_loop_back 来实现这种“回环”功能,现在,这个配置已经被移除。不同的驱动只需要在配置中设置相同的 GPIO 编号就能实现这个功能。

ADC

旧版的 ADC 驱动 driver/adc.h 在 5.0 的版本中就已经被弃用 (参考 ADC)。从 6.0 版本开始,旧版驱动被完全移除。新驱动位于 esp_adc 组件中,头文件引用路径为 esp_adc/adc_oneshot.h, esp_adc/adc_continuous.h, esp_adc/adc_cali.hesp_adc/adc_cali_scheme.h

RMT

rmt_tx_channel_config_t 配置结构体中的 io_od_mode 已经被移除。如果想要使用开漏模式,你需要手动调用 GPIO 驱动中的 gpio_od_enable() 函数。

GPIO

gpio_iomux_in()gpio_iomux_out() 已被 gpio_iomux_input()gpio_iomux_output() 函数取代, 并移至 esp_private/gpio.h 头文件中作为仅供内部使用的私有 API。

LEDC

  • ledc_timer_set() 已被移除。请使用 ledc_timer_config()ledc_set_freq() 代替。

  • LEDC_APB_CLK_HZLEDC_REF_CLK_HZ 已被移除。

  • esp_driver_gpio 不再作为 esp_driver_ledc 的公共依赖组件。

  • ledc_isr_register() 已被弃用。LEDC 中断处理由驱动内部实现,如果需要注册中断回调,仅需要注册事件回调即可。

  • ledc_channel_config_t::intr_type 已被弃用。LEDC_INTR_FADE_END 中断使能/禁用控制由驱动内部处理。用户仍可以通过 ledc_cb_register() 注册该中断的回调。

  • soc_periph_ledc_clk_src_legacy_t::LEDC_USE_RTC8M_CLK 已被移除。请使用 LEDC_USE_RC_FAST_CLK 代替。

UART

UART_FIFO_LEN 已被移除。请使用 UART_HW_FIFO_LEN 代替。

I2C

I2C 从机在 v5.4 上已经被重新设计。在当前版本上,老的 I2C 从机驱动已经被移除,详细内容请参考编程指南中关于 I2C 从机的部分。

主要的概念上和用法上的改变如下所示:

主要概念更新

  • 老版本的 I2C 从机驱动是主动读写,这不符合 I2C 从机的一般用法。在新版的 I2C 从机中,I2C 的读写通过主机驱动产生的事件以触发回调被动完成。

主要用法更新

  • i2c_slave_receive 被移除, 在新驱动中使用回调接收数据。

  • i2c_slave_transmit 已被 i2c_slave_write 取代。

  • i2c_slave_write_ram 被移除。

  • i2c_slave_read_ram 被移除。

同时,I2C的主机驱动也有一些API用法上的改动

主要用法更新

当主机在I2C总线上检测到NACK,以下的函数目前会返回 ESP_ERR_INVALID_RESPONSE,而不是像之前一样返回 ESP_ERR_INVALID_STATE: - i2c_master_transmit - i2c_master_multi_buffer_transmit - i2c_master_transmit_receive - i2c_master_execute_defined_operations

旧版定时器组驱动被移除

旧版的定时器组驱动 driver/timer.h 在 5.0 的版本中就已经被弃用 (参考 旧版定时器组驱动被弃用)。从 6.0 版本开始,旧版驱动被完全移除。新驱动位于 esp_driver_gptimer 组件中,头文件引用路径为 driver/gptimer.h

旧版 I2S 驱动被移除

  • 旧版的 I2S 驱动 driver/i2s.h 在 5.0 的版本中就已经被弃用(请参考 I2S 驱动)。从 6.0 版本开始,旧版驱动被完全移除。新驱动位于 esp_driver_i2s 组件中,头文件引用路径为 driver/i2s_std.h, driver/i2s_pdm.h and driver/i2s_tdm.h

  • i2s_set_adc_mode, i2s_adc_enablei2s_adc_disable 在 5.0 版本中就已经被弃用。从 6.0 版本开始,这三个接口被完全移除。

GDMA

  • GDMA_ISR_IRAM_SAFE Kconfig 选项会带来不必要的风险,因此被移除。现在,不同的 GDMA 通道它们的中断在 Cache 关闭期间的行为可以互不影响。

  • gdma_new_channel 已经被移除。现在当申请一个 GDMA 通道时,必须要根据实际使用的总线调用 gdma_new_ahb_channelgdma_new_axi_channel 函数。

  • async_memcpy_config_t 中的 sram_trans_alignpsram_trans_align 成员均已经被移除。请使用 async_memcpy_config_t::dma_burst_size 来设置 DMA 的突发传输大小。

  • esp_dma_capable_mallocesp_dma_capable_calloc 函数已经被移除。请使用 heap/include/esp_heap_caps.h 中的 heap_caps_malloc()heap_caps_calloc() 函数搭配 MALLOC_CAP_DMA|MALLOC_CAP_CACHE_ALIGNED 分配满足 DMA 和 Cache 对齐要求的内存。

SDMMC

  • sdmmc_host_t 结构体中的 get_dma_info 成员接口已经被移除。对应的 sdspi_host_get_dma_infosdmmc_host_get_dma_info 函数也已经被移除。DMA 相关的设置会由驱动内部处理好。

旧版温度传感器驱动被移除

旧版的温度传感器驱动 driver/temp_sensor.h 在 5.1 的版本中就已经被弃用(请参考 旧版温度传感器驱动已被弃用)。从 6.0 版本开始,旧版驱动被完全移除。新驱动位于 esp_driver_tsens 组件中,头文件引用路径为 driver/temperature_sensor.h

LCD

  • LCD 驱动中的 GPIO 编号已经从 int 类型修改为更加类型安全的 gpio_num_t 类型。比如原来使用 5 作为 GPIO 编号,现在需要使用 GPIO_NUM_5

  • esp_lcd_i80_bus_config_t 结构体中的 psram_trans_alignsram_trans_align 均已被 esp_lcd_i80_bus_config_t::dma_burst_size 成员取代,用来设置 DMA 的突发传输大小。

  • esp_lcd_rgb_panel_config_t 结构体中的 psram_trans_alignsram_trans_align 均已被 esp_lcd_rgb_panel_config_t::dma_burst_size 成员取代,用来设置 DMA 的突发传输大小。

  • esp_lcd_panel_io_spi_config_t 结构体中的 octal_modequad_mode 标志均已删除,驱动已经可以自动探测到当前 SPI 总线的数据线模式。

  • esp_lcd_panel_dev_config_t 结构体中的 color_spacergb_endian 配置均已被 esp_lcd_panel_dev_config_t::rgb_ele_order 成员取代,用来设置 RGB 元素的排列顺序。对应的类型 lcd_color_rgb_endian_tesp_lcd_color_space_t 也已被移除,请使用 lcd_rgb_element_order_t 替代。

  • esp_lcd_panel_disp_off 函数已被移除。请使用 esp_lcd_panel_disp_on_off() 函数来控制显示内容的开关。

  • esp_lcd_rgb_panel_event_callbacks_t 中的 on_bounce_frame_finish 成员已被 esp_lcd_rgb_panel_event_callbacks_t::on_frame_buf_complete 成员取代,用于指示一个完整的帧缓冲区已被发送给 LCD 控制器。

SPI

CONFIG_SPI_MASTER_IN_IRAM 选项在 menuconfig 中默认不可见,并且依赖于 CONFIG_FREERTOS_IN_IRAM。这样修改是为了防止位于 IRAM 中的 SPI 函数调用位于 flash 中的 FreeRTOS 函数时可能发生的崩溃。

要启用 SPI 主机 IRAM 优化:

  1. 在 menuconfig 中进入 Component configFreeRTOSPort

  2. 启用 Place FreeRTOS functions in IRAM (CONFIG_FREERTOS_IN_IRAM)

  3. 在 menuconfig 中进入 Component configESP-Driver:SPI Configurations

  4. 启用 Place transmitting functions of SPI master into IRAM (CONFIG_SPI_MASTER_IN_IRAM)

请注意,启用 CONFIG_FREERTOS_IN_IRAM 会显著增加 IRAM 使用量。在优化 SPI 性能时,需进行权衡。


此文档对您有帮助吗?