mirror of
https://github.com/Fishwaldo/bl_mcu_sdk.git
synced 2025-07-22 20:59:03 +00:00
[docs] update api rst
This commit is contained in:
parent
21e87ac8ca
commit
af049a8ef8
156 changed files with 3156 additions and 508 deletions
|
@ -82,7 +82,7 @@ ADC 设备接口全部遵循标准设备驱动管理层提供的接口。
|
|||
**ADC_register**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``adc_register`` 用来注册一个 ADC 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 ADC 设备的宏定义。例如定义宏 ``BSP_USING_ADC0`` 方可使用 ``ADC0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``ADC0`` 设备。
|
||||
``adc_register`` 用来注册 ADC 设备标准驱动接口,在注册之前需要打开对应 ADC 设备的宏定义。例如定义宏 ``BSP_USING_ADC0`` 方可使用 ``ADC0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``ADC0`` 设备。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
|
@ -115,7 +115,7 @@ ADC 设备接口全部遵循标准设备驱动管理层提供的接口。
|
|||
|
||||
- dev 设备句柄
|
||||
- oflag 设备的打开方式
|
||||
- return 错误码,0 表示打开成功,其他表示错误
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
``oflag`` 可以写入以下参数:
|
||||
|
||||
|
@ -138,7 +138,7 @@ ADC 设备接口全部遵循标准设备驱动管理层提供的接口。
|
|||
int device_close(struct device *dev);
|
||||
|
||||
- dev 设备句柄
|
||||
- return 错误码,0 表示关闭成功,其他表示错误
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
**device_control**
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
@ -213,7 +213,7 @@ DMA 设备接口全部遵循标准设备驱动管理层提供的接口。并且
|
|||
**dma_register**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``dma_register`` 用来注册一个 DMA 设备的一个通道,注册该设备需要使用的标准接口,在注册之前需要打开对应 DMA 设备的通道宏定义。例如定义宏 ``BSP_USING_DMA_CH0`` 方可使用 ``DMA`` 设备的 0 通道,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``DMA`` 设备的 0 通道。
|
||||
``dma_register`` 用来注册 DMA 设备标准驱动接口,在注册之前需要打开对应 DMA 设备的通道宏定义。例如定义宏 ``BSP_USING_DMA_CH0`` 方可使用 ``DMA`` 设备的 0 通道,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``DMA`` 设备的 0 通道。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ I2C 设备标准接口当前仅使用 ``device_open`` , 并提供标准的数据
|
|||
**i2c_register**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``i2c_register`` 用来注册一个 I2C 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 I2C 设备的宏定义。例如定义宏 ``BSP_USING_I2C0`` 方可使用 ``I2C0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``I2C0`` 设备。
|
||||
``i2c_register`` 用来注册 I2C 设备标准驱动接口,在注册之前需要打开对应 I2C 设备的宏定义。例如定义宏 ``BSP_USING_I2C0`` 方可使用 ``I2C0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``I2C0`` 设备。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
|
|
|
@ -0,0 +1,271 @@
|
|||
I2S 设备
|
||||
=========================
|
||||
|
||||
简介
|
||||
------------------------
|
||||
I2S (Inter—IC Sound) 总线, 又称集成电路内置音频总线,为数字音频设备之间的音频数据传输而制定的一种总线标准,
|
||||
该总线专门用于音频设备之间的数据传输,广泛应用于各种多媒体系统。博流系列 MCU 中 I2S 设备具有以下特性:
|
||||
|
||||
- 支持主模式以及从模式
|
||||
- 支持 Left-justified/Right-justified/DSP 等数据格式
|
||||
- 支持 8/16/24/32 比特数据宽度
|
||||
- 除单声道/双声道模式之外,同时支持四声道模式
|
||||
- 支持动态静音切换功能
|
||||
- 数据发送 FIFO 的宽度为 32 位,深度 16
|
||||
- 数据接收 FIFO 的宽度为 32 位,深度 16
|
||||
|
||||
I2S 设备结构体定义
|
||||
------------------------
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
typedef struct i2s_device {
|
||||
struct device parent;
|
||||
uint8_t id;
|
||||
i2s_mode_t iis_mode;
|
||||
interface_mode_t interface_mode;
|
||||
uint32_t sampl_freq_hz;
|
||||
i2s_channel_num_t channel_num;
|
||||
i2s_frame_size_t frame_size;
|
||||
i2s_data_size_t data_size;
|
||||
uint8_t fifo_threshold;
|
||||
void *tx_dma;
|
||||
void *rx_dma;
|
||||
} i2s_device_t;
|
||||
|
||||
- parent 继承父类属性
|
||||
- id 外设 id 号, 0 表示 I2S0
|
||||
- iis_mode 主从模式选择
|
||||
- interface_mode 协议类型
|
||||
- sampl_freq_hz 音频数据采样率
|
||||
- channel_num 音频通道数,非 DSP 模式下最高 2 通道
|
||||
- frame_size 帧格式长度,即每个通道音频的 BCLK 个数
|
||||
- data_size 实际的有效音频数据位宽,不能大于 frame_size
|
||||
- fifo_threshold 收发数据的 fifo 深度阈值
|
||||
- tx_dma 附加的发送 dma 句柄
|
||||
- rx_dma 附加的接收 dma 句柄
|
||||
|
||||
``iis_mode`` 提供以下类型
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
typedef enum {
|
||||
I2S_MODE_MASTER = 0, /*!< I2S as master */
|
||||
I2S_MODE_SLAVE, /*!< I2S as slave */
|
||||
} i2s_mode_t;
|
||||
|
||||
``interface_mode`` 提供以下类型
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
typedef enum {
|
||||
I2S_MODE_STD, /*!< I2S STD Mode */
|
||||
I2S_MODE_LEFT, /*!< Left-Justified Mode */
|
||||
I2S_MODE_RIGHT, /*!< Right-Justified Mode */
|
||||
I2S_MODE_DSP_A, /*!< DSP/PCM Mode A*/
|
||||
I2S_MODE_DSP_B, /*!< DSP/PCM Mode B*/
|
||||
} interface_mode_t;
|
||||
|
||||
``channel_num`` 提供以下类型
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
typedef enum {
|
||||
I2S_FS_CHANNELS_NUM_MONO = 1, /*!< I2S frame is for 1 channels */
|
||||
I2S_FS_CHANNELS_NUM_2 = 2, /*!< I2S frame is for 2 channels */
|
||||
I2S_FS_CHANNELS_NUM_3 = 3, /*!< I2S frame is for 3 channels, DSP mode only, frame_size must equal data_size*/
|
||||
I2S_FS_CHANNELS_NUM_4 = 4, /*!< I2S frame is for 4 channels, DSP mode only, frame_size must equal data_size*/
|
||||
} i2s_channel_num_t;
|
||||
|
||||
``frame_size`` 提供以下类型
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
typedef enum {
|
||||
I2S_FRAME_LEN_8 = 1, /*!< I2S frame size 8 bits */
|
||||
I2S_FRAME_LEN_16 = 2, /*!< I2S frame size 16 bits */
|
||||
I2S_FRAME_LEN_24 = 3, /*!< I2S frame size 24 bits */
|
||||
I2S_FRAME_LEN_32 = 4, /*!< I2S frame size 32 bits */
|
||||
} i2s_frame_size_t;
|
||||
|
||||
``data_size`` 提供以下类型
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
typedef enum {
|
||||
I2S_DATA_LEN_8 = 1, /*!< I2S data size 8 bits */
|
||||
I2S_DATA_LEN_16 = 2, /*!< I2S data size 16 bits */
|
||||
I2S_DATA_LEN_24 = 3, /*!< I2S data size 24 bits */
|
||||
I2S_DATA_LEN_32 = 4, /*!< I2S data size 32 bits */
|
||||
} i2s_data_size_t;
|
||||
|
||||
I2S 设备参数配置表
|
||||
------------------------
|
||||
|
||||
每一个 I2S 设备都有一个参数配置宏,宏定义位于 ``bsp/board/xxx`` 目录下 ``peripheral_config.h`` 文件,
|
||||
因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。
|
||||
例如打开宏 ``BSP_USING_I2S0`` ,``I2S0_CONFIG`` 即生效,同时 ``I2S0`` 设备就可以进行注册和使用了。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
#if defined(BSP_USING_I2S0)
|
||||
#ifndef I2S0_CONFIG
|
||||
#define I2S0_CONFIG \
|
||||
{ \
|
||||
.id = 0, \
|
||||
.iis_mode = I2S_MODE_MASTER, \
|
||||
.interface_mode = I2S_MODE_LEFT, \
|
||||
.sampl_freq_hz = 16 * 1000, \
|
||||
.channel_num = I2S_FS_CHANNELS_NUM_MONO, \
|
||||
.frame_size = I2S_FRAME_LEN_16, \
|
||||
.data_size = I2S_DATA_LEN_16, \
|
||||
.fifo_threshold = 8, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static i2s_device_t i2sx_device[I2S_MAX_INDEX] = {
|
||||
#ifdef BSP_USING_I2S0
|
||||
I2S0_CONFIG,
|
||||
#endif
|
||||
};
|
||||
|
||||
.. note:: 上述配置可以通过 ``I2S_DEV(dev)->xxx`` 进行修改,只能在调用 ``device_open`` 之前使用。
|
||||
|
||||
I2S 设备接口
|
||||
------------------------
|
||||
|
||||
I2S 设备接口全部遵循标准设备驱动管理层提供的接口。
|
||||
|
||||
**i2s_register**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``i2s_register`` 用来注册 I2S 标准驱动接口,在注册之前需要打开对应 I2S 设备的宏定义,例如定义宏 ``BSP_USING_I2S0`` 方可使用 I2S0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 I2S 设备。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int i2s_register(enum i2s_index_type index, const char *name, uint16_t flag);
|
||||
|
||||
- index 要注册的设备索引
|
||||
- name 为注册的设备命名
|
||||
- flag 默认可读可写属性
|
||||
|
||||
``index`` 用来选择 I2S 设备配置,一个 index 对应一个 I2S 设备配置,比如 ``I2S0_INDEX`` 对应 ``I2S0_CONFIG`` 配置。index 有如下可选类型
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
enum i2s_index_type {
|
||||
#ifdef BSP_USING_I2S0
|
||||
I2S0_INDEX,
|
||||
#endif
|
||||
I2S_MAX_INDEX
|
||||
};
|
||||
|
||||
**device_open**
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。实际调用 ``i2s_open``。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int device_open(struct device *dev, uint16_t oflag);
|
||||
|
||||
|
||||
- dev 设备句柄
|
||||
- oflag 设备的打开方式
|
||||
- return 错误码,0 表示打开成功,其他表示错误
|
||||
|
||||
``oflag`` 可以写入以下参数:
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
#define DEVICE_OFLAG_STREAM_TX 0x001 /* 设备以轮训发送模式打开 */
|
||||
#define DEVICE_OFLAG_STREAM_RX 0x002 /* 设备以轮训接收模式打开 */
|
||||
#define DEVICE_OFLAG_DMA_TX 0x010 /* 设备以 DMA 发送模式打开 */
|
||||
#define DEVICE_OFLAG_DMA_RX 0x020 /* 设备以 DMA 接收模式打开 */
|
||||
|
||||
**device_close**
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
``device_close`` 用于设备的关闭。实际调用 ``i2s_close``。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int device_close(struct device *dev);
|
||||
|
||||
- dev 设备句柄
|
||||
- return 错误码,0 表示关闭成功,其他表示错误
|
||||
|
||||
**device_control**
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``device_control`` 用于根据命令对设备进行控制和参数的修改。实际调用 ``i2s_control``。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int device_control(struct device *dev, int cmd, void *args);
|
||||
|
||||
- dev 设备句柄
|
||||
- cmd 设备控制命令
|
||||
- args 控制参数
|
||||
- return 不同的控制命令返回的意义不同。
|
||||
|
||||
I2S 设备除了标准的控制命令,还具有自己特殊的控制命令。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
#define I2S_GET_TX_FIFO_CMD 0x10
|
||||
#define I2S_GET_RX_FIFO_CMD 0x11
|
||||
|
||||
``args`` 根据不同的 ``cmd`` 传入不同,具体如下:
|
||||
|
||||
.. list-table:: table1
|
||||
:widths: 15 10 30
|
||||
:header-rows: 1
|
||||
|
||||
* - cmd
|
||||
- args
|
||||
- description
|
||||
* - DEVICE_CTRL_I2S_ATTACH_TX_DMA
|
||||
- struct device*
|
||||
- 链接发送 dma 设备
|
||||
* - DEVICE_CTRL_I2S_ATTACH_RX_DMA
|
||||
- struct device*
|
||||
- 链接接收 dma 设备
|
||||
* - DEVICE_CTRL_GET_CONFIG
|
||||
- I2S_GET_TX_FIFO_CMD
|
||||
- 获取 I2S 发送 fifo 未发数据量
|
||||
* - DEVICE_CTRL_GET_CONFIG
|
||||
- I2S_GET_RX_FIFO_CMD
|
||||
- 获取 I2S 接受 fifo 已收数据量
|
||||
|
||||
**device_write**
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
``device_write`` 用于 I2S 设备数据的发送,考虑到效率,目前仅支持 DMA 模式发送。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int device_write(struct device *dev, uint32_t pos, const void *buffer, uint32_t size);
|
||||
|
||||
- dev 设备句柄
|
||||
- pos 无作用
|
||||
- buffer 要写入的 buffer 缓冲区
|
||||
- size 要写入的长度
|
||||
- return 错误码,0 表示写入成功,其他表示错误
|
||||
|
||||
**device_read**
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
``device_read`` 用于 I2S 设备数据的接收,考虑到效率,目前仅支持 DMA 模式接收。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int device_read(struct device *dev, uint32_t pos, void *buffer, uint32_t size);
|
||||
|
||||
- dev 设备句柄
|
||||
- pos 无作用
|
||||
- buffer 要读入的 buffer 缓冲区
|
||||
- size 要读入的长度
|
||||
- return 错误码,0 表示读入成功,其他表示错误
|
||||
|
|
@ -90,7 +90,7 @@ PWM 设备接口全部遵循标准设备驱动管理层提供的接口。并且
|
|||
**pwm_register**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``pwm_register`` 用来注册一个 PWM 设备的一个通道,注册该设备需要使用的标准接口,在注册之前需要打开对应 PWM 设备某个通道的宏定义,例如定义 ``BSP_USING_PWM_CH0`` 方可使用 ``PWM`` 通道0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 PWM 设备。
|
||||
``pwm_register`` 用来注册 PWM 设备的一个通道的标准驱动接口,在注册之前需要打开对应 PWM 设备某个通道的宏定义,例如定义 ``BSP_USING_PWM_CH0`` 方可使用 ``PWM`` 通道0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 PWM 设备。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
|
|
|
@ -133,7 +133,7 @@ SPI 设备接口全部遵循标准设备驱动管理层提供的接口。
|
|||
**spi_register**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``spi_register`` 用来注册一个 SPI 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 SPI 设备的宏定义,例如定义宏 ``BSP_USING_SPI0`` 方可使用 SPI0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 SPI 设备。
|
||||
``spi_register`` 用来注册 SPI 设备标准驱动接口,在注册之前需要打开对应 SPI 设备的宏定义,例如定义宏 ``BSP_USING_SPI0`` 方可使用 SPI0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 SPI 设备。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
|
|
|
@ -120,7 +120,7 @@ TIMER 设备接口全部遵循标准设备驱动管理层提供的接口。
|
|||
**timer_register**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``timer_register`` 用来注册一个 TIMER 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 TIMER 设备的宏定义。例如定义宏 ``BSP_USING_TIMER_CH0`` 方可使用 ``TIMER_CH0_INDEX`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``TIMER_CH0_INDEX`` 设备。
|
||||
``timer_register`` 用来注册 TIMER 设备标准驱动接口,在注册之前需要打开对应 TIMER 设备的宏定义。例如定义宏 ``BSP_USING_TIMER_CH0`` 方可使用 ``TIMER_CH0_INDEX`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``TIMER_CH0_INDEX`` 设备。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
|
|
|
@ -121,7 +121,7 @@ UART 设备接口全部遵循标准设备驱动管理层提供的接口。
|
|||
**uart_register**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``uart_register`` 用来注册一个 UART 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 UART 设备的宏定义。例如定义宏 ``BSP_USING_UART0`` 方可使用 ``UART0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``UART0`` 设备。
|
||||
``uart_register`` 用来注册 UART 设备标准驱动接口,在注册之前需要打开对应 UART 设备的宏定义。例如定义宏 ``BSP_USING_UART0`` 方可使用 ``UART0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``UART0`` 设备。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
|
|
|
@ -0,0 +1,412 @@
|
|||
USB 设备
|
||||
=========================
|
||||
|
||||
简介
|
||||
------------------------
|
||||
|
||||
USB 通信串行总线(Universal Serial Bus)是一种外部总线标准,用于规范电脑和外部设备的连接和通讯,是应用在 PC 领域的接口技术。博流 BL70X 系列 MCU 中 USB 设备具有以下特性:
|
||||
|
||||
- 支持 USB1.1 全速设备
|
||||
- 支持 8 个双向端点:EP0 可配置为控制/批量/中断/同步端点,EP1-EP7 可配置为批量/中断/同步端点
|
||||
- 每个端点均包含 TX、RX 两个方向的 FIFO,FIFO 深度 64 字节,并且支持 DMA
|
||||
- 支持内部 transceiver
|
||||
- 支持 suspend/resume
|
||||
- 支持 LPM
|
||||
- 支持多种 USB 中断配置
|
||||
|
||||
USB 设备结构体定义
|
||||
------------------------
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
typedef struct usb_dc_device {
|
||||
struct device parent;
|
||||
uint8_t id;
|
||||
usb_dc_ep_state_t in_ep[8];
|
||||
usb_dc_ep_state_t out_ep[8];
|
||||
void *tx_dma;
|
||||
void *rx_dma;
|
||||
} usb_dc_device_t;
|
||||
|
||||
- parent 继承父类属性
|
||||
- id USB id,0 表示 USB0
|
||||
- in_ep USB 输入端点的参数
|
||||
- out_ep USB 输出端点的参数
|
||||
- tx_dma 附加的发送 dma 句柄
|
||||
- rx_dma 附加的接收 dma 句柄
|
||||
|
||||
|
||||
``in_ep`` ``out_ep`` 的结构如下
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t ep_ena;
|
||||
uint32_t is_stalled;
|
||||
struct usb_dc_ep_cfg ep_cfg;
|
||||
} usb_dc_ep_state_t;
|
||||
|
||||
- ep_ena 继承父类属性
|
||||
- is_stalled 挂起状态,0表示非挂起状态,1表示挂起状态
|
||||
- ep_cfg 端点的属性
|
||||
|
||||
|
||||
``ep_cfg`` 的结构如下
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
struct usb_dc_ep_cfg {
|
||||
uint8_t ep_addr;
|
||||
uint16_t ep_mps;
|
||||
uint8_t ep_type;
|
||||
};
|
||||
|
||||
- ep_addr 端点的地址
|
||||
- ep_mps 端点最大 packet 长度
|
||||
- ep_type 端点传输类型
|
||||
|
||||
|
||||
.. note:: 以上参数无需用户配置
|
||||
|
||||
USB 设备接口
|
||||
------------------------
|
||||
|
||||
USB 设备接口遵循标准设备驱动管理层提供的接口。
|
||||
|
||||
**usb_dc_register**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``usb_dc_register`` 用来注册 USB 设备标准驱动接口,在注册之前需要打开对应 USB 设备的宏定义,例如定义宏 ``BSP_USING_USB`` 方可使用 USB 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 USB 设备。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int usb_dc_register(enum usb_index_type index, const char *name, uint16_t flag);
|
||||
|
||||
- index 要注册的设备索引
|
||||
- name 为注册的设备命名
|
||||
- flag 默认可读可写属性
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
**device_open**
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。实际调用 ``usb_open``。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int device_open(struct device *dev, uint16_t oflag);
|
||||
|
||||
- dev 设备句柄
|
||||
- oflag 设备的打开方式
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
**device_close**
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
``device_close`` 用于设备的关闭。实际调用 ``usb_close``。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int device_close(struct device *dev);
|
||||
|
||||
- dev 设备句柄
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
**device_control**
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``device_control`` 用于根据命令对设备进行控制和参数的修改。实际调用 ``usb_control``。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int device_control(struct device *dev, int cmd, void *args);
|
||||
|
||||
- dev 设备句柄
|
||||
- cmd 设备控制命令
|
||||
- args 控制参数
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
USB 设备除了标准的控制命令,还具有私有的控制命令。
|
||||
|
||||
.. list-table:: table1
|
||||
:widths: 15 10 30
|
||||
:header-rows: 1
|
||||
|
||||
* - cmd
|
||||
- args
|
||||
- description
|
||||
* - DEVICE_CTRL_USB_DC_SET_ACK
|
||||
- uint32_t
|
||||
- 设置 USB 设备 ACK 状态
|
||||
* - DEVICE_CTRL_USB_DC_ENUM_ON
|
||||
- NULL
|
||||
- 打开 USB 设备枚举
|
||||
* - DEVICE_CTRL_USB_DC_ENUM_OFF
|
||||
- NULL
|
||||
- 关闭 USB 设备枚举
|
||||
* - DEVICE_CTRL_USB_DC_GET_EP_TX_FIFO_CNT
|
||||
- uint32_t
|
||||
- 设置 USB 设备发送 FIFO 的个数
|
||||
* - DEVICE_CTRL_USB_DC_GET_EP_RX_FIFO_CNT
|
||||
- uint32_t
|
||||
- 设置 USB 设备接收 FIFO 的个数
|
||||
* - DEVICE_CTRL_ATTACH_TX_DMA
|
||||
- device*
|
||||
- 设置 USB 设备发送 dma 句柄
|
||||
* - DEVICE_CTRL_ATTACH_RX_DMA
|
||||
- device*
|
||||
- 设置 USB 设备接收 dma 句柄
|
||||
* - DEVICE_CTRL_USB_DC_SET_TX_DMA
|
||||
- uint32_t
|
||||
- 开启 USB 设备通过 dma 发送
|
||||
* - DEVICE_CTRL_USB_DC_SET_RX_DMA
|
||||
- uint32_t
|
||||
- 开启 USB 设备通过 dma 接收
|
||||
|
||||
``args`` 支持的标准控制命令 ``cmd`` 具体如下:
|
||||
|
||||
.. list-table:: table2
|
||||
:widths: 15 10 30
|
||||
:header-rows: 1
|
||||
|
||||
* - cmd
|
||||
- args
|
||||
- description
|
||||
* - DEVICE_CTRL_SET_INT
|
||||
- uint32_t
|
||||
- 开启 USB 中断
|
||||
|
||||
|
||||
**device_write**
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
``device_write`` 用于 USB 设备数据的发送,当前只支持同步传输 dma 发送,实际调用 ``usb_write``。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int device_write(struct device *dev, uint32_t pos, const void *buffer, uint32_t size);
|
||||
|
||||
- dev 设备句柄
|
||||
- pos 无作用
|
||||
- buffer 要写入的 buffer 缓冲区
|
||||
- size 要写入的长度
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
**device_read**
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
``device_read`` 用于 USB 设备数据的接收,当前只支持同步传输 dma 接收。实际调用 ``usb_read``。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int device_read(struct device *dev, uint32_t pos, void *buffer, uint32_t size);
|
||||
|
||||
- dev 设备句柄
|
||||
- pos 无作用
|
||||
- buffer 要读入的 buffer 缓冲区
|
||||
- size 要读入的长度
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
**device_set_callback**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``device_set_callback`` 用于注册一个 USB 设备中断回调函数。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int device_set_callback(struct device *dev, void (*callback)(struct device *dev, void *args, uint32_t size, uint32_t event));
|
||||
|
||||
- dev 设备句柄
|
||||
- callback 要注册的中断回调函数
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
- dev 设备句柄
|
||||
- args 接收发送缓冲区,数据类型为 uint8_t*
|
||||
- size 传输长度
|
||||
- event 中断事件类型
|
||||
|
||||
USB 设备 ``event`` 类型如下
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
enum usb_dc_event_type {
|
||||
/** USB error reported by the controller */
|
||||
USB_DC_EVENT_ERROR,
|
||||
/** USB reset */
|
||||
USB_DC_EVENT_RESET,
|
||||
/** Start of Frame received */
|
||||
USB_DC_EVENT_SOF,
|
||||
/** USB connection established, hardware enumeration is completed */
|
||||
USB_DC_EVENT_CONNECTED,
|
||||
/** USB configuration done */
|
||||
USB_DC_EVENT_CONFIGURED,
|
||||
/** USB connection suspended by the HOST */
|
||||
USB_DC_EVENT_SUSPEND,
|
||||
/** USB connection lost */
|
||||
USB_DC_EVENT_DISCONNECTED,
|
||||
/** USB connection resumed by the HOST */
|
||||
USB_DC_EVENT_RESUME,
|
||||
|
||||
/** setup packet received */
|
||||
USB_DC_EVENT_SETUP_NOTIFY,
|
||||
/** ep0 in packet received */
|
||||
USB_DC_EVENT_EP0_IN_NOTIFY,
|
||||
/** ep0 out packet received */
|
||||
USB_DC_EVENT_EP0_OUT_NOTIFY,
|
||||
/** ep in packet except ep0 received */
|
||||
USB_DC_EVENT_EP_IN_NOTIFY,
|
||||
/** ep out packet except ep0 received */
|
||||
USB_DC_EVENT_EP_OUT_NOTIFY,
|
||||
/** Initial USB connection status */
|
||||
USB_DC_EVENT_UNKNOWN
|
||||
};
|
||||
|
||||
**usb_dc_send_from_ringbuffer**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``usb_dc_send_from_ringbuffer`` 用于从 ringbuffer 中读取数据并通过某个端点将数据发送出去。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int usb_dc_send_from_ringbuffer(struct device *dev, Ring_Buffer_Type *rb, uint8_t ep);
|
||||
|
||||
- dev 设备指针
|
||||
- rb rinbuffer 结构体指针
|
||||
- ep 端点地址
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
**usb_dc_receive_to_ringbuffer**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``usb_dc_receive_to_ringbuffer`` 用于从某个端点接收数据并保存到 ringbuffer 中。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int usb_dc_receive_to_ringbuffer(struct device *dev, Ring_Buffer_Type *rb, uint8_t ep);
|
||||
|
||||
- dev 设备指针
|
||||
- rb rinbuffer 结构体指针
|
||||
- ep 端点地址
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
.. important:: 以下函数为 USB Device 协议栈需要实现的 porting 接口,用户无需在应用层调用。
|
||||
|
||||
.. _usb_dc_set_address:
|
||||
|
||||
**usb_dc_set_address**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``usb_dc_set_address`` 用于 USB 设备地址的配置。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int usb_dc_set_address(const uint8_t addr);
|
||||
|
||||
- addr USB 设备的地址
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
.. _usb_dc_ep_open:
|
||||
|
||||
**usb_dc_ep_open**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``usb_dc_ep_open`` 用于 USB 设备端点的开启。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int usb_dc_ep_open(const struct usbd_endpoint_cfg *ep_cfg);
|
||||
|
||||
- ep_cfg 端点的属性
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
.. _usb_dc_ep_close:
|
||||
|
||||
**usb_dc_ep_close**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``usb_dc_ep_close`` 用于 USB 设备端点的关闭。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int usb_dc_ep_close(const uint8_t ep);
|
||||
|
||||
- ep 端点地址
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
.. _usb_dc_ep_set_stall:
|
||||
|
||||
**usb_dc_ep_set_stall**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``usb_dc_ep_set_stall`` 用于 USB 设备挂起状态的设置,挂起状态下无法收发数据。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int usb_dc_ep_set_stall(const uint8_t ep);
|
||||
|
||||
- ep 端点地址
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
.. _usb_dc_ep_clear_stall:
|
||||
|
||||
**usb_dc_ep_clear_stall**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``usb_dc_ep_clear_stall`` 用于端点挂起状态的清除,非挂起状态可以进行收发数据。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int usb_dc_ep_clear_stall(const uint8_t ep);
|
||||
|
||||
- ep 端点地址
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
.. _usb_dc_ep_is_stalled:
|
||||
|
||||
**usb_dc_ep_is_stalled**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``usb_dc_ep_is_stalled`` 用于 USB 设备挂起状态的查询。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int usb_dc_ep_is_stalled(const uint8_t ep, uint8_t *stalled);
|
||||
|
||||
- ep 端点id
|
||||
- stalled 保存挂起状态的地址, 0 表示非挂起状态, 1 表示挂起状态
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
.. _usb_dc_ep_write:
|
||||
|
||||
**usb_dc_ep_write**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``usb_dc_ep_write`` 用于向某个端点发送数据。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int usb_dc_ep_write(const uint8_t ep, const uint8_t *data, uint32_t data_len, uint32_t *ret_bytes);
|
||||
|
||||
- ep 端点地址
|
||||
- data 要发送的数据地址
|
||||
- data_len 要发送数据的长度
|
||||
- ret_bytes 实际成功发生的数据长度
|
||||
- return 错误码,0表示成功,其他表示失败
|
||||
|
||||
.. _usb_dc_ep_read:
|
||||
|
||||
**usb_dc_ep_read**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``usb_dc_ep_read`` 用于从某个端点接收数据。
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
int usb_dc_ep_read(const uint8_t ep, uint8_t *data, uint32_t max_data_len, uint32_t *read_bytes);
|
||||
|
||||
- ep 端点地址
|
||||
- data 要接收数据的地址
|
||||
- data_len 要接收数据的长度,不能大于最大包长
|
||||
- ret_bytes 实际成功接收的数据长度
|
||||
- return 错误码,0表示成功,其他表示失败
|
|
@ -11,7 +11,9 @@ Peripheral
|
|||
PWM 设备 <api_pwm>
|
||||
DMA 设备 <api_dma>
|
||||
I2C 设备 <api_i2c>
|
||||
I2S 设备 <api_i2s>
|
||||
SPI 设备 <api_spi>
|
||||
ADC 设备 <api_adc>
|
||||
DAC 设备 <api_dac>
|
||||
TIMER 设备 <api_timer>
|
||||
TIMER 设备 <api_timer>
|
||||
USB 设备 <api_usb>
|
|
@ -1,7 +1,7 @@
|
|||
USB Stack
|
||||
=======================
|
||||
|
||||
USB Stack 是一个跨平台的、用于嵌入式 MCU 的 USB 协议栈,该协议栈对标准设备请求、CLASS 请求、VENDOR 请求规范了一套统一的函数框架,从而对复合设备或者使用自定义设备类时,能够在极短的时间内进行添加和移植。此外,该协议栈代码优美,内存占用小(不使用静态数组),通用性非常高,提供了一套标准的 porting 接口,供给不同的 MCU 使用。其中,usb device 协议栈当前具有以下功能:
|
||||
USB Stack 是一个跨平台的、用于嵌入式 MCU 的 USB 协议栈。其中 DEVICE 协议栈对标准设备请求、CLASS 请求、VENDOR 请求规范了一套统一的函数框架,从而对复合设备或者使用自定义设备类时,能够在极短的时间内进行添加和移植,提供了一套标准的 porting 接口,供给不同的 MCU 使用,因此,通用性非常高。此外在代码优美方面,以及内存占用方面也是相当出色。USB DEVICE 协议栈当前具有以下功能:
|
||||
|
||||
- 支持 USB2.0 全速和高速设备
|
||||
- 支持端点中断注册功能,porting 给用户自己处理中断里的数据
|
||||
|
@ -17,48 +17,46 @@ USB Stack 是一个跨平台的、用于嵌入式 MCU 的 USB 协议栈,该协
|
|||
|
||||
.. note:: USB DEVICE 协议栈的代码实现过程参考 `<https://www.bilibili.com/video/BV1Ef4y1t73d>`_
|
||||
|
||||
USB Device Porting 接口
|
||||
------------------------
|
||||
USB DEVICE 协议栈 porting 接口
|
||||
-------------------------------
|
||||
|
||||
USB Device Porting 接口在 ``usb_stack/common/usb_dc.h`` 文件中声明,用户根据自己的 MCU 进行实现
|
||||
USB DEVICE 协议栈 porting 接口在 ``usb_stack/common/usb_dc.h`` 文件中声明,用户根据自己的 MCU 实现以下接口
|
||||
|
||||
**usbd_set_address**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
- ``usbd_set_address`` 调用 :ref:`usb_dc_set_address`
|
||||
- ``usbd_ep_open`` 调用 :ref:`usb_dc_ep_open`
|
||||
- ``usbd_ep_close`` 调用 :ref:`usb_dc_ep_close`
|
||||
- ``usbd_ep_set_stall`` 调用 :ref:`usb_dc_ep_set_stall`
|
||||
- ``usbd_ep_clear_stall`` 调用 :ref:`usb_dc_ep_clear_stall`
|
||||
- ``usbd_ep_is_stalled`` 调用 :ref:`usb_dc_ep_is_stalled`
|
||||
- ``usbd_ep_write`` 调用 :ref:`usb_dc_ep_write`
|
||||
- ``usbd_ep_read`` 调用 :ref:`usb_dc_ep_read`
|
||||
|
||||
**usbd_ep_open**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**usbd_ep_close**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**usbd_ep_set_stall**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**usbd_ep_clear_stall**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**usbd_ep_is_stalled**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**usbd_ep_write**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**usbd_ep_read**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**usbd_event_notify_handler**
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
USB Device 应用层接口
|
||||
----------------------
|
||||
|
||||
USB Device 控制器接口
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
USB DEVICE 控制器接口
|
||||
-------------------------------
|
||||
|
||||
**usb_dc_init**
|
||||
""""""""""""""""""
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
``usb_dc_init`` 用来注册 USB 设备和初始化 USB 硬件相关寄存器,注册 usb 中断回调函数。在注册之前需要打开对应 USB 设备的宏定义,例如定义宏 ``BSP_USING_USB`` 方可使用 USB 设备。
|
||||
|
||||
USB Device 通用接口
|
||||
.. code-block:: C
|
||||
|
||||
struct device *usb_dc_init(void)
|
||||
{
|
||||
usb_dc_register(USB_INDEX, "usb", DEVICE_OFLAG_RDWR);
|
||||
usb = device_find("usb");
|
||||
device_set_callback(usb, usb_dc_event_callback);
|
||||
device_open(usb, 0);
|
||||
return usb;
|
||||
}
|
||||
|
||||
- device 返回 USB 设备句柄
|
||||
|
||||
.. note::中断处理函数则是调用 ``usbd_event_notify_handler``
|
||||
|
||||
USB DEVICE 应用层接口
|
||||
------------------------
|
||||
|
||||
USB DEVICE 通用接口
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**usbd_desc_register**
|
||||
|
|
|
@ -21,10 +21,10 @@ project = 'BL_MCU_SDK 开发指南'
|
|||
copyright = '2021, BouffaloLab Co., Ltd'
|
||||
author = 'BouffaloLab MCU Team'
|
||||
|
||||
version = '0.3'
|
||||
version = '0.2'
|
||||
|
||||
# The full version, including alpha/beta/rc tags
|
||||
release = '0.3'
|
||||
release = '0.2'
|
||||
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
|
|
|
@ -55,39 +55,54 @@ BL706_AVB 开发板如下图所示
|
|||
Sipeed RV-Debugger plus
|
||||
|
||||
**Windows**
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- Sipeed RV-Debugger Plus 调试器在 Windows 系统中所以时我们需要将驱动更换为 ``Win USB`` 驱动
|
||||
Sipeed RV-Debugger Plus 调试器在 Windows 系统中所以时我们需要将驱动更换为 ``Win USB`` 驱动
|
||||
|
||||
- 1. 首先,将调试器 Type-C USB 接口使用 USB 数据线连接到 PC 主机,打开 PC 的设备管理器,在端口一栏可以看到调试器被识别为两个串口(*注:不是开发板上的串口*),或者在 ``通用串行总线控制器`` 看到 ``USB Serial Converter A`` 和 ``USB Serial Converter B``
|
||||
|
||||
.. important:: **注意:** 若在设备管理器中看到的串口名称为 “``USB 串行设备(COM*)``”,说明调试器进入了 ``Boot`` 模式。请将调试器断电重新上电,注意先不要将调试器连接到目标板;此时在到设备管理器中看是否正常
|
||||
- 1. 首先,将调试器 Type-C USB 接口使用 USB 数据线连接到 PC 主机,打开 PC 的设备管理器,在端口一栏可以看到调试器被识别为两个串口(*注:不是开发板上的串口*),或者在 ``通用串行总线控制器`` 看到 ``USB Serial Converter A`` 和 ``USB Serial Converter B``
|
||||
|
||||
.. figure:: img/sipeed_rv_debugger_1.png
|
||||
|
||||
.. figure:: img/sipeed_rv_debugger_4.png
|
||||
|
||||
- 2. 从 sipeed 网站下载 ``zadig-2.4`` 替换驱动程序。下载地址:`http://dl.sipeed.com/MAIX/tools/sipeed-rv-debugger/zadig-2.4.exe <http://dl.sipeed.com/MAIX/tools/sipeed-rv-debugger/zadig-2.4.exe>`_
|
||||
- 3. 下载好双击打开 ``zadig-2.4.exe``,选择 Options 勾选 List All Devices.
|
||||
.. important:: 1. 调试器的端口号必须以 ``usb serial port`` 开头,如果插了多个类似的设备,请只留一个,确认调试器端口号
|
||||
.. important:: 2. 若在设备管理器中看到的串口名称为 “``USB 串行设备(COM*)``”,说明调试器进入了 ``Boot`` 模式。请将调试器断电重新上电,注意先不要将调试器连接到目标板;此时在到设备管理器中看是否正常
|
||||
|
||||
.. figure:: img/sipeed_rv_debugger_7.png
|
||||
|
||||
.. important:: 3. 若在设备管理器中没有串口,显示其他设备,请到 `FTDI 官网 <https://ftdichip.com/drivers/vcp-drivers/>`_ 下载与系统匹配的驱动
|
||||
|
||||
.. figure:: img/sipeed_rv_debugger_6.png
|
||||
|
||||
- 2. 以上都没有问题后,从 sipeed 网站下载 ``zadig-2.4`` 替换驱动程序。下载地址:`http://dl.sipeed.com/MAIX/tools/sipeed-rv-debugger/zadig-2.4.exe <http://dl.sipeed.com/MAIX/tools/sipeed-rv-debugger/zadig-2.4.exe>`_
|
||||
- 3. 下载好双击打开 ``zadig-2.4.exe``,选择 Options 勾选 List All Devices.
|
||||
|
||||
.. figure:: img/sipeed_rv_debugger_3.png
|
||||
|
||||
- 4. 找到 JTAG Debugger(Interface 0),然后选择替换的驱动为 ``WinUSB`` 点击 Replace Driver 替换
|
||||
- 5. 再次打开设备管理器, 看到其中一个串口被替换成通用串行总线设备就说明安装成功
|
||||
- 4. 找到 JTAG Debugger(Interface 0),然后选择替换的驱动为 ``WinUSB`` 点击 Replace Driver 替换
|
||||
- 5. 再次打开设备管理器, 看到其中一个串口被替换成通用串行总线设备就说明安装成功
|
||||
|
||||
.. figure:: img/sipeed_rv_debugger_2.png
|
||||
|
||||
- 6. 到这里 Sipeed RV-Debugger Plus 的设备驱动就更换好了,接下来就可以愉快的玩耍啦~
|
||||
- 6. 到这里 Sipeed RV-Debugger Plus 的设备驱动就更换好了,接下来就可以愉快的玩耍啦~
|
||||
|
||||
|
||||
**可能出现的问题:**
|
||||
|
||||
.. caution:: 1. 调试器接上时没有出现两个串口,调试器上有一个 LED 常亮,那么应该是进入了 Boot 模式。请将调试器断电重新上电,注意先不要将调试器连接到目标板;调试器上电后,正常情况下两个 LED 灯会闪烁一下熄灭;此时再看一下任务管理器中的设备是否正确。
|
||||
|
||||
.. caution:: 2. 在设备管理器中没有看到任何串口,但是在``通用串行总线控制器``中看到 ``USB Serial Converter A`` 和 ``USB Serial Converter B``;遇到这种情况,请到 `FTDI 官网 <https://ftdichip.com/drivers/vcp-drivers/>`_ 下载与系统匹配的驱动,将 ``USB Serial Converter B`` 重新安装为串口;``USB Serial Converter A`` 也即 Interface 0,使用 ``zadig-2.4.exe`` 替换为 WinUSB 驱动。
|
||||
|
||||
.. caution:: 3. 如果经过上面的操作还是不能正常使用,没有出现正确的现象,那么建议从 Sipeed 官方 `GitHub <https://github.com/sipeed/RV-Debugger-BL702>`_ 仓库获取固件,重新烧写;按住调试器上的 ``Boot`` 键不要释放,将调试器插入电脑上电,使调试器进入 Boot 模式,重新刷入固件后;断电重启
|
||||
.. caution:: 2. 如果经过上面的操作还是不能正常使用,没有出现正确的现象,那么建议从 Sipeed 官方 `GitHub <https://github.com/sipeed/RV-Debugger-BL702>`_ 仓库获取固件,重新烧写;按住调试器上的 ``Boot`` 键不要释放,将调试器插入电脑上电,使调试器进入 Boot 模式,重新刷入固件后;断电重启
|
||||
|
||||
**Linux**
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- 首先,将调试器 Type-C USB 接口使用 USB 数据线连接到 PC 主机,执行以下命令,查看是否存在
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ lsusb
|
||||
|
||||
.. figure:: img/sipeed_rv_debugger_8.png
|
||||
|
||||
- 安装 Openocd 及其需要的依赖项
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
Binary file not shown.
After Width: | Height: | Size: 5.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.3 MiB |
|
@ -7,4 +7,4 @@ GPIO 示例
|
|||
:maxdepth: 1
|
||||
|
||||
GPIO 输出 - 流水灯 <blink_demo>
|
||||
GPIO 中断 - 流水灯 <button_demo>
|
||||
GPIO 中断 - 按键检测 <button_demo>
|
Loading…
Add table
Add a link
Reference in a new issue