PSPI SENSOR使用参考
1. 概述¶
PSPI即Private SPI,Sigmastar私有SPI协议。本文将介绍rtos如何点一颗spi sensor,以SSC9211 demo板为例。目前sensor只能接pspi0, panel只能接pspi1。
2. sysdesc配置¶
根据HW Checklist中的padmux table选择PSPI的输入pad。本例中以PSPI0的mode2为例,同时还需要配置SR0 MCLK为mode2以及I2C1为mode4。
对应的引脚为:
Pad | Mode |
---|---|
PAD_SR_IO01 | PSPI0_CLK |
PAD_SR_IO02 | PSPI0_MOSI[0] |
PAD_SR_IO03 | PSPI0_MOSI[1] |
PAD_SR_IO04 | PSPI0_MOSI[2] |
PAD_SR_IO05 | PSPI0_MOSI[3] |
PAD_SR_IO06 | I2C1_SCL0 |
PAD_SR_IO07 | I2C1_SDA0 |
PAD_SR_IO09 | SR0_MCLK |
需要确认当前使用的product config是使用的何种sysdesc文件,可在rtk/proj/mak/product
中找到当前工程的配置,打开配置搜索CONFIG_SYSDESC_SELECT
确认当前使用的sysdesc文件。例如,当前工程使用pioneer3_ssc020a_64_freertos_smp_isw_usbdev
,其对应的sysdesc文件为CONFIG_SYSDESC_SELECT = "pioneer3-ssc020a-s01b.sys"
,那么就去修改这个文件。
sysdesc配置文件路径:rtk/proj/sc/driver/sysdriver/sysdesc/hal/pioneer3/pub/
配置示例:
如上图,<pspiX>
表示PSPI栏目,X的值为0和1,例如<pspi0>
表示PSPI0,仅支持输入接收,适用于sensor,<pspi1>
表示PSPI1,仅支持输出,适用于panel。
本例中,用户只需关心<pspi0>
下的选项[pspi_padmux_u8]
、[sr00_mclk_padmux_u8]
、[mclk_freq_u32]
、[rst_u32]
以及<i2cm1>
下的选项[i2cm_padmux_u8]
。
[pspi_padmux_u8]
:表示pspi padmux值。例如<pspi0>
下[pspi_padmux_u8] 4;
,表示PSPI0被复用成mode 4。
[sr00_mclk_padmux_u8]
:表示mclk padmux值。点亮sensor需要有mclk提供时钟源,例如<pspi0>
下[sr00_mclk_padmux_u8] 5;
,表示mclk被复用成mode 5。
[mclk_freq_u32]
:表示mlck值,单位为Hz。例如<pspi0>
下[mclk_freq_u32] 24000000;
,表示MCLK当前频率为24MHz。
[rst_u32]
:表示reset gpio脚。例如<pspi0>
下[rst_u32] PAD_SR_IO10;
,表示将使用PAD_SR_IO10
脚来作为sensor的rst脚。
[i2cm_padmux_u8]
:表示i2c总线padmux值。例如<i2cm1>
下[i2cm_padmux_u8] 4;
,表示I2C1被复用成mode 4。
3. 驱动SPI SENSOR出图¶
配置了padmux之后,就可以开始配置spi sensor。(完整例子请看uvc_app.c
中关于pspi的部分,见宏定义PSPI_SENSOR
)
3.1. 驱动SPI SENSOR¶
可以通过sensor datasheet或者找sensor厂商要寄存器表,然后通过调用i2c api,逐个把寄存器值写入sensor。
如上图,是demo中的pspi sensor register table部分内容。
如上图,就是通过i2c_transfer把sensor_cmd_real_time_quad_pspi寄存器表写入sensor,这样sensor就可以开始出流了。接下来就是串流了。
3.2. 串流¶
驱动完sensor之后,就可以开始串流了。
pipeline:
PSPI -> DIVP -> VENC -> UVC
初始化PSPI模块并驱动sensor:
将PSPI和DIVP绑定: