|
xt-sdk 文档 v1.0.3
xt-sdk 嵌入式 SDK API 参考
|
版本:0.1 | 日期:2026-07-03 | 路径: platforms/components/xtiny/xt_hal/
xt_hal_i2s 是 xtiny 平台的 I2S(Inter-IC Sound)驱动模块,仅支持 Master 模式。提供阻塞传输、非阻塞 0 拷贝传输、流式传输和连续 pingpong 传输四种模式,覆盖从简单测试到低延迟实时音频的完整场景。
设计理念: 多种传输模式,按需选择 。从最简单的阻塞 API 到零拷贝连续流式传输,用户根据实时性要求自由选用。
仅依赖 xt_hal_internal.h ( xt_error.h )。
| 模式 | 函数后缀 | 阻塞 | 缓冲区管理 | 适用场景 |
|---|---|---|---|---|
| 阻塞 | _block | 是 | 用户提供 | 简单测试、初始化配置 |
| 0 拷贝 | _0copy | 否 | 用户提供 | 低延迟单次传输 |
| 流式 | (无后缀) | 否 | 内部缓冲队列 | 实时音频流 |
| 连续 pingpong | _continuous | 否 | 用户提供,对半拆分 | 极低延迟实时音频 |
流式( tx / rx / txrx )基于内部缓冲队列:用户先通过 set_tx_buf / set_rx_buf 注册缓冲区,再通过 tx / rx / txrx 推送/拉取数据。通过 get_rx_count / get_tx_free 查询缓冲区水位。
_continuous 系列将用户提供的缓冲区对半拆分为前后两段:
用户必须在回调中及时处理数据,否则下一次 BATCH_DONE 到来时数据尚未更新。
以下为函数签名大纲,完整的参数说明、返回值、注意事项请查看 xt_hal_i2s(I2S 驱动) 。
| 函数签名 | 说明 |
|---|---|
| xt_err_t xt_hal_i2s_set_cb(uint8_t i2s_id, xt_hal_i2s_cb_t cb) | 设置回调函数 |
| xt_err_t xt_hal_i2sm_get_result(uint8_t i2s_id, struct xt_hal_i2s_result *result) | 获取传输结果(仅可在回调中调用) |
| 函数签名 | 说明 |
|---|---|
| xt_err_t xt_hal_i2sm_set_rx_buf(uint8_t i2s_id, void *buffer, size_t size) | 设置流式接收缓冲区 |
| xt_err_t xt_hal_i2sm_set_tx_buf(uint8_t i2s_id, void *buffer, size_t size) | 设置流式发送缓冲区 |
| int32_t xt_hal_i2sm_tx(uint8_t i2s_id, const void *tx_buffer, size_t size) | 流式非阻塞发送 |
| int32_t xt_hal_i2sm_rx(uint8_t i2s_id, void *rx_buffer, size_t size) | 流式非阻塞接收 |
| int32_t xt_hal_i2sm_txrx(uint8_t i2s_id, const void *tx_buffer, void *rx_buffer, size_t size) | 流式非阻塞全双工 |
| int32_t xt_hal_i2sm_get_rx_count(uint8_t i2s_id) | 获取流缓冲区中已接收采样点数 |
| int32_t xt_hal_i2sm_get_tx_free(uint8_t i2s_id) | 获取流缓冲区中剩余空闲采样点数 |
| 函数签名 | 说明 |
|---|---|
| int32_t xt_hal_i2sm_tx_0copy(uint8_t i2s_id, const void *tx_buffer, size_t size) | 非阻塞 0 拷贝发送 |
| int32_t xt_hal_i2sm_rx_0copy(uint8_t i2s_id, void *rx_buffer, size_t size) | 非阻塞 0 拷贝接收 |
| int32_t xt_hal_i2sm_txrx_0copy(uint8_t i2s_id, const void *tx_buffer, void *rx_buffer, size_t size) | 非阻塞 0 拷贝全双工 |
| 函数签名 | 说明 |
|---|---|
| xt_err_t xt_hal_i2sm_tx_continuous(uint8_t i2s_id, const void *tx_buffer, size_t size) | 启动连续 pingpong 发送(size 需偶数) |
| xt_err_t xt_hal_i2sm_rx_continuous(uint8_t i2s_id, void *rx_buffer, size_t size) | 启动连续 pingpong 接收(size 需偶数) |
| xt_err_t xt_hal_i2sm_txrx_continuous(uint8_t i2s_id, const void *tx_buffer, void *rx_buffer, size_t size) | 启动连续 pingpong 全双工 |
| xt_err_t xt_hal_i2sm_stop_continuous(uint8_t i2s_id) | 停止连续 pingpong 传输 |
| 类型签名 | 说明 |
|---|---|
| typedef void (*xt_hal_i2s_cb_t)(uint8_t i2s_id, uint32_t event_id) | I2S 回调函数类型 |
| struct xt_hal_i2s_result { void *tx_buffer; void *rx_buffer; size_t size; } | I2S 传输结果 |
| 常量 | 说明 |
|---|---|
| XT_HAL_I2S_INVALID_ID | 无效 I2S ID( 0xFF ) |
| XT_HAL_I2S_PROTOCOL_I2S | 标准 I2S 格式 |
| XT_HAL_I2S_PROTOCOL_MSB_JUST | MSB 对齐格式 |
| XT_HAL_I2S_PROTOCOL_LSB_JUST | LSB 对齐格式 |
| XT_HAL_I2S_PROTOCOL_PCM | PCM 格式 |
| XT_HAL_I2S_DATA_BITS_8 / _16 / _24 / _32 | 数据位宽 |
| XT_HAL_I2S_CHANNELS_MONO | 单声道 |
| XT_HAL_I2S_CHANNELS_STEREO | 立体声 |
| XT_HAL_I2S_MCLK_64FS ~ _512FS | MCLK 倍频 |