PSPI SENSOR使用参考

Version 1.1


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绑定: