微信用户

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户  发布于  2019-08-16 12:23:06
采纳率 0%
87个问答
4674

传感器插拔问题思考

 
本帖最后由 alaode 于 2019-8-16 12:25 编辑

1.平台3559av100
2.问题:场景内要实现插拔操作,如果不连接sensor 就显示彩条图像, 连接了sensor 就显示sensor 图像。

思路一. 获取中断, 如果没有中断,在vo上显示彩条。
思路二.获取中断,如果没有中断,在vi上HI_MPI_VI_SetUserPic。

我更倾向于后者,因为 可能在录像的时候,插拔sensor。这样,我继续录像不会影响操作。或者 想想如果使用send venc frame的方式 也许也不会对录像造成影响。

问题1:如何认为sensor已经拿掉? 如何认为sensor 已经插入。
问题2: 如何获取中断。
····································



反正感觉不习惯这样。




欢迎大家前来指教和讨论。
我来回答
回答18个
时间排序
认可量排序

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 12:49:45
认可0
本帖最后由 alaode 于 2019-8-16 13:13 编辑

实验条件是我没有插入摄像头。

下面是  设置vi图片的软件(下面软件是有问题的软件啊!!!!)
[]-2705: HI_MPI_VI_SetUserPic failed with 0xa0108003!
[]-2710: HI_MPI_VI_EnableUserPic failed with 0xa0108009!




   [code]   HI_S32             s32Ret;
    VI_DEV             ViDev               = 0;
    VI_PIPE            ViPipe              = 0;
    VI_CHN             ViChn               = 0;
    HI_S32             s32WorkSnsId        = 0;
    VO_DEV             VoDev               = SAMPLE_VO_DEV_DHD0;
    VO_CHN             VoChn               = 0;
    SIZE_S             stSize;
    VB_CONFIG_S        stVbConf;
    PIC_SIZE_E         enPicSize           = PIC_3840x2160;
    HI_U32             u32BlkSize;
    VI_LDC_ATTR_S      stLDCAttr   = {0};
    SAMPLE_VI_CONFIG_S stViConfig  = {0};
    SAMPLE_VO_CONFIG_S stVoConfig  = {0};
    combo_dev_t          ComboDev;
        VI_USERPIC_ATTR_S    vi_pic;

    DYNAMIC_RANGE_E    enDynamicRange = DYNAMIC_RANGE_SDR8;
    PIXEL_FORMAT_E     enPixFormat    = PIXEL_FORMAT_YVU_SEMIPLANAR_420;
    VIDEO_FORMAT_E     enVideoFormat  = VIDEO_FORMAT_LINEAR;
    COMPRESS_MODE_E    enCompressMode = COMPRESS_MODE_NONE;
    VI_VPSS_MODE_E     enMastPipeMode = VI_OFFLINE_VPSS_OFFLINE;
        static VB_POOL     hPool  = VB_INVALID_POOLID;
    VB_BLK   hBlock;
         HI_U64  u64PhyAddr;
     HI_U8*   pVirAddr;
         HI_U32 u32LumaSize         = 0;
         HI_U32 u32PicLStride = 0;
         HI_U32 u32PicCStride = 0;
         HI_U32 u32Width          = 0;
         HI_U32 u32Height          = 0;
         HI_U32 u32BitWidth;

    /************************************************
    step1:  Get all sensors information
    *************************************************/
    SAMPLE_COMM_VI_GetSensorInfo(&stViConfig);
    ComboDev = SAMPLE_COMM_VI_GetComboDevBySensor(stViConfig.astViInfo[s32WorkSnsId].stSnsInfo.enSnsType, s32WorkSnsId);


    stViConfig.s32WorkingViNum                           = 1;

    stViConfig.as32WorkingViId[0]                        = 0;
    stViConfig.astViInfo[0].stSnsInfo.MipiDev            = ComboDev;
    stViConfig.astViInfo[0].stSnsInfo.s32BusId           = 0;

    stViConfig.astViInfo[0].stDevInfo.ViDev              = ViDev;
    stViConfig.astViInfo[0].stDevInfo.enWDRMode          = WDR_MODE_NONE;

    stViConfig.astViInfo[0].stPipeInfo.enMastPipeMode    = enMastPipeMode;
    stViConfig.astViInfo[0].stPipeInfo.aPipe[0]          = ViPipe;
    stViConfig.astViInfo[0].stPipeInfo.aPipe[1]          = -1;
    stViConfig.astViInfo[0].stPipeInfo.aPipe[2]          = -1;
    stViConfig.astViInfo[0].stPipeInfo.aPipe[3]          = -1;

    stViConfig.astViInfo[0].stChnInfo.ViChn              = ViChn;
    stViConfig.astViInfo[0].stChnInfo.enPixFormat        = enPixFormat;
    stViConfig.astViInfo[0].stChnInfo.enDynamicRange     = enDynamicRange;
    stViConfig.astViInfo[0].stChnInfo.enVideoFormat      = enVideoFormat;
    stViConfig.astViInfo[0].stChnInfo.enCompressMode     = enCompressMode;

    /************************************************
    step2:  Get  input size
    *************************************************/
    s32Ret = SAMPLE_COMM_VI_GetSizeBySensor(stViConfig.astViInfo[s32WorkSnsId].stSnsInfo.enSnsType, &enPicSize);

    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VI_GetSizeBySensor failed!\n");
        return s32Ret;
    }

    s32Ret = SAMPLE_COMM_SYS_GetPicSize(enPicSize, &stSize);

    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
        return s32Ret;
    }

    /************************************************
    step3:  Init SYS and common VB
    *************************************************/

    hi_memset(&stVbConf, sizeof(VB_CONFIG_S), 0, sizeof(VB_CONFIG_S));
    stVbConf.u32MaxPoolCnt              = 2;

    u32BlkSize = COMMON_GetPicBufferSize(stSize.u32Width, stSize.u32Height, SAMPLE_PIXEL_FORMAT, DATA_BITWIDTH_10, COMPRESS_MODE_SEG, DEFAULT_ALIGN);
    stVbConf.astCommPool[0].u64BlkSize  = u32BlkSize;
    stVbConf.astCommPool[0].u32BlkCnt   = 10;

    u32BlkSize = VI_GetRawBufferSize(stSize.u32Width, stSize.u32Height, PIXEL_FORMAT_RGB_BAYER_16BPP, COMPRESS_MODE_NONE, 32);
    stVbConf.astCommPool[1].u64BlkSize  = u32BlkSize;
    stVbConf.astCommPool[1].u32BlkCnt   = 4;

    s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);

    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("system init failed with %d!\n", s32Ret);
        SAMPLE_COMM_SYS_Exit();
        return s32Ret;
    }

    s32Ret = SAMPLE_COMM_VI_SetParam(&stViConfig);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_COMM_SYS_Exit();
        return s32Ret;
    }


    /************************************************
    step4:  Init VI and VO
    *************************************************/
    SAMPLE_COMM_VO_GetDefConfig(&stVoConfig);
    s32Ret = SAMPLE_VIO_StartViVo(&stViConfig, &stVoConfig);

    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_VIO_StartViVo failed witfh %d\n", s32Ret);
        goto EXIT;
    }


    /************************************************
    step5:  Bind VI and VO
    *************************************************/
    s32Ret = SAMPLE_COMM_VI_Bind_VO(ViPipe, ViChn, VoDev, VoChn);

    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VI_Bind_VO failed with %#x!\n", s32Ret);
        goto EXIT1;
    }


#if 0
    stLDCAttr.bEnable = HI_TRUE;
    stLDCAttr.stAttr.bAspect = 0;
    stLDCAttr.stAttr.s32XRatio = 100;
    stLDCAttr.stAttr.s32YRatio = 100;
    stLDCAttr.stAttr.s32XYRatio = 100;
    stLDCAttr.stAttr.s32CenterXOffset = 0;
    stLDCAttr.stAttr.s32CenterYOffset = 0;
    stLDCAttr.stAttr.s32DistortionRatio = 500;

    s32Ret = HI_MPI_VI_SetChnLDCAttr(ViPipe,ViChn,&stLDCAttr);

    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_VI_SetChnLDCAttr failed witfh %d\n", s32Ret);
        goto EXIT;
    }

#endif

        printf("stSize.u32Width :%d stSize.u32Width :%d\n,",stSize.u32Width,stSize.u32Width);
         u32BlkSize = COMMON_GetPicBufferSize(stSize.u32Width, stSize.u32Height, SAMPLE_PIXEL_FORMAT, DATA_BITWIDTH_8, COMPRESS_MODE_NONE, DEFAULT_ALIGN);
         hPool         = HI_MPI_VB_CreatePool( u32BlkSize, 1, HI_NULL);
         while ((hBlock = HI_MPI_VB_GetBlock(hPool, u32BlkSize, HI_NULL)) == VB_INVALID_HANDLE)
         {
                                printf("HI_MPI_VB_GetBlock error!!!\n");
         }
        u64PhyAddr = HI_MPI_VB_Handle2PhysAddr(hBlock);

        pVirAddr = (HI_U8*) HI_MPI_SYS_Mmap(u64PhyAddr, u32BlkSize);
        if (pVirAddr == HI_NULL)
        {
                         printf("Mem dev may not open\n");
                        //  VI_Restore(Pipe, Chn);
                         return (HI_VOID*) - 1;
        }

       
        vi_pic.enUsrPicMode=VI_USERPIC_MODE_PIC;
        u32BitWidth = 8;
        u32Width=3840;
        u32Height=2160;
        u32PicLStride = ALIGN_UP((u32Width * u32BitWidth + 7) >> 3, 16);
        u32PicCStride = u32PicLStride;
        u32LumaSize = u32PicLStride * u32Height;



         printf("u32Width =%d \n",u32Width);
         printf("u32Height =%d \n",u32Height);
         printf("u32PicLStride =%d \n",u32PicLStride);
         printf("u32PicCStride =%d \n",u32PicCStride);
         printf("u32LumaSize =%d \n",u32LumaSize);
         printf("u64PhyAddr =0x%x",u64PhyAddr);
         printf("pVirAddr =0x%x",pVirAddr);


         
         memset(&vi_pic.unUsrPic.stUsrPicFrm.stVFrame, 0, sizeof(VIDEO_FRAME_S));
         vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u64PhyAddr[0] = u64PhyAddr;
         vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u64PhyAddr[1] = vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u64PhyAddr[0] + u32LumaSize;
         
         vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u64VirAddr[0] = (HI_U64)pVirAddr;
         vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u64VirAddr[1] = vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u64VirAddr[0] + u32LumaSize;
         vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u32Width           = u32Width;
         vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u32Height    = u32Height;
         vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u32Stride[0] = u32PicLStride;
         vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u32Stride[1] = u32PicCStride;
         
        vi_pic.unUsrPic.stUsrPicFrm.stVFrame.enCompressMode = COMPRESS_MODE_NONE;
        vi_pic.unUsrPic.stUsrPicFrm.stVFrame.enPixelFormat  = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
        vi_pic.unUsrPic.stUsrPicFrm.stVFrame.enVideoFormat  = VIDEO_FORMAT_LINEAR;
        vi_pic.unUsrPic.stUsrPicFrm.stVFrame.enDynamicRange = DYNAMIC_RANGE_SDR8;
        vi_pic.unUsrPic.stUsrPicFrm.stVFrame.enField = VIDEO_FIELD_FRAME;
         
        vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u64PTS         =  40;
        vi_pic.unUsrPic.stUsrPicFrm.stVFrame.u32TimeRef =  2;

       
         

         s32Ret=HI_MPI_VI_SetUserPic(0, &vi_pic);
     if (HI_SUCCESS != s32Ret)
         {
                 SAMPLE_PRT("HI_MPI_VI_SetUserPic failed with %#x!\n", s32Ret);
         }
         s32Ret=HI_MPI_VI_EnableUserPic(0);
         if (HI_SUCCESS != s32Ret)
         {
                SAMPLE_PRT("HI_MPI_VI_EnableUserPic failed with %#x!\n", s32Ret);
         }


    printf("now LDC off, press any key to switch LDC Off!\n");
    getchar();

    stLDCAttr.bEnable = HI_FALSE;
    stLDCAttr.stAttr.bAspect = 0;
    stLDCAttr.stAttr.s32XRatio = 100;
    stLDCAttr.stAttr.s32YRatio = 100;
    stLDCAttr.stAttr.s32XYRatio = 100;
    stLDCAttr.stAttr.s32CenterXOffset = 0;
    stLDCAttr.stAttr.s32CenterYOffset = 0;
    stLDCAttr.stAttr.s32DistortionRatio = 300;

    s32Ret = HI_MPI_VI_SetChnLDCAttr(ViPipe,ViChn,&stLDCAttr);

    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_VI_SetChnLDCAttr failed witfh %d\n", s32Ret);
        goto EXIT;
    }

    printf("now LDC off, press any key to switch LDC On!\n");
    getchar();

    stLDCAttr.bEnable = HI_TRUE;
    stLDCAttr.stAttr.bAspect = 0;
    stLDCAttr.stAttr.s32XRatio = 100;
    stLDCAttr.stAttr.s32YRatio = 100;
    stLDCAttr.stAttr.s32XYRatio = 100;
    stLDCAttr.stAttr.s32CenterXOffset = 0;
    stLDCAttr.stAttr.s32CenterYOffset = 0;
    stLDCAttr.stAttr.s32DistortionRatio = 300;

    s32Ret = HI_MPI_VI_SetChnLDCAttr(ViPipe,ViChn,&stLDCAttr);

    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_VI_SetChnLDCAttr failed witfh %d\n", s32Ret);
        goto EXIT;
    }


    printf("now LDC on and Rotation 0, press any key to switch Rotation 90!\n");
    getchar();[/code]

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 13:02:43
认可0
[code]stSize.u32Width :3840 stSize.u32Height :2160
,u32Width =3840
u32Height =2160
u32PicLStride =3840
u32PicCStride =3840
u32LumaSize =8294400
u64PhyAddr =0x781a3000pVirAddr =0x83dae000
[]-2720: HI_MPI_VI_SetUserPic failed with 0xa0108003!
[]-2725: HI_MPI_VI_EnableUserPic failed with 0xa0108009!
[/code]

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 13:10:06
认可0
本帖最后由 alaode 于 2019-8-16 13:15 编辑

为了 保险 先使用bg纯色的方式,如下
[code]vi_pic.enUsrPicMode=VI_USERPIC_MODE_BGC;
        vi_pic.unUsrPic.stUsrPicBg.u32BgColor =0;
        usleep(1000);
         s32Ret=HI_MPI_VI_SetUserPic(0, &vi_pic);
     if (HI_SUCCESS != s32Ret)
         {
                 SAMPLE_PRT("HI_MPI_VI_SetUserPic failed with %#x!\n", s32Ret);
         }
         
         usleep(1000);
         s32Ret=HI_MPI_VI_EnableUserPic(0);
         if (HI_SUCCESS != s32Ret)
         {
                SAMPLE_PRT("HI_MPI_VI_EnableUserPic failed with %#x!\n", s32Ret);
         }
[/code]


微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 13:10:54
认可0
log如下[code],[]-2730: HI_MPI_VI_EnableUserPic failed with 0xa0108003!
now LDC off, press any key to switch LDC Off!
[/code]

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 13:11:34
认可0
本帖最后由 alaode 于 2019-8-16 13:21 编辑

使能有问题, 找一找 为什么。

[code]        usleep(1000);
         s32Ret=HI_MPI_VI_SetUserPic(1, &vi_pic);
     if (HI_SUCCESS != s32Ret)
         {
                 SAMPLE_PRT("HI_MPI_VI_SetUserPic failed with %#x!\n", s32Ret);
         }
         
         sleep(1);
         s32Ret=HI_MPI_VI_EnableUserPic(1);
         if (HI_SUCCESS != s32Ret)
         {
                SAMPLE_PRT("HI_MPI_VI_EnableUserPic failed with %#x!\n", s32Ret);
         }
[/code]
报 pipe 不存在。 说明 pipe 0 是存在的,那是什么问题的, 联想到depth。

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 13:23:56
认可0
上面的问题没有解决,却找到了 另外的方式。
[code]HI_S32 HI_MPI_VI_SendPipeYUV(VI_PIPE ViPipe, const VIDEO_FRAME_INFO_S *pstVideoFrame, HI_S32 s32MilliSec);
HI_S32 HI_MPI_VI_SendPipeRaw(HI_U32 u32PipeNum, VI_PIPE PipeId[], const VIDEO_FRAME_INFO_S *pstVideoFrame[],
                                    HI_S32 s32MilliSec);
[/code]




是否可以这样去send 数据那?

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 13:32:46
认可0
[code]VI_CHN_ATTR_S CHN_ATTR_3840x2160_420_SDR8_LINEAR =
{
    {3840, 2160},
    PIXEL_FORMAT_YVU_SEMIPLANAR_420,
    DYNAMIC_RANGE_SDR8,
    VIDEO_FORMAT_LINEAR,
    COMPRESS_MODE_NONE,
    0,      0,
    4,
    { -1, -1}
};
[/code]

depth 修改成4  
[code][]-2731: HI_MPI_VI_EnableUserPic failed with 0xa0108003!
[/code]

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 13:43:20
认可0
本帖最后由 alaode 于 2019-8-16 13:55 编辑

考虑热插拔的问题, 被拔下去 可以通过 获取图像超时,或者HI_MPI_VI_QueryPipeStatus  得到中断状态?。 也许。

插上那? 使用i2c 探测设备 是否连接成功吗?


HI_MPI_VI_QueryPipeStatus   打印的中断
确实可以使用这种方式确定  是否被插拔了。  

Status.u32IntCnt :109
Status.u32IntCnt :139
Status.u32IntCnt :169
Status.u32IntCnt :200
Status.u32IntCnt :230
Status.u32IntCnt :260
Status.u32IntCnt :290
Status.u32IntCnt :321
Status.u32IntCnt :351
Status.u32IntCnt :381
Status.u32IntCnt :412
Status.u32IntCnt :442
Status.u32IntCnt :472
Status.u32IntCnt :503
Status.u32IntCnt :533
Status.u32IntCnt :563
Status.u32IntCnt :593
Status.u32IntCnt :624
Status.u32IntCnt :654
Status.u32IntCnt :684
Status.u32IntCnt :715
Status.u32IntCnt :745


如何用i2c 确定设备是否存在那。 会不会因为 上电的问题导致无法i2c 通信, 然后必须要复位一下 才能通信那。先不管是否 需要复位,先尝试i2c 知道设备的存在。

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 14:01:54
认可0
是否使用 读寄存器的方式  我认为不好, 内核里面有i2c read 的多次尝试传输。可能要占用cpu 的使用率。

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 14:04:35
认可0
ioctl(fd, I2C_SLAVE,addr);
ioctl(fd, I2C_SLAVE_FORCE, addr);
在调用read()和write()函数之前必须设置从机地址。这两行都可以设置从机的地址,区别是第二行无论内核中是否已有驱动在使用这个地址都会成功,第一行则只在该地址空闲的情况下成功。由于i2c-dev创建的i2c_client不加入i2c_adapter的client列表,所以不能防止其它线程使用同一地址,也不能防止驱动模块占用同一地址。

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 14:19:41
认可0
[code]while(1)
            {

                        s32Ret=ioctl(fd_i2c, I2C_SLAVE,(0x34>>1));
                        printf("fd_i2c :s32Ret :%d \n",s32Ret);
                       
                        sleep(1);

            }[/code]
[code]fd_i2c :s32Ret :0
fd_i2c :s32Ret :0
fd_i2c :s32Ret :0
fd_i2c :s32Ret :0
fd_i2c :s32Ret :0
fd_i2c :s32Ret :0
fd_i2c :s32Ret :0
fd_i2c :s32Ret :0
fd_i2c :s32Ret :0
fd_i2c :s32Ret :0
fd_i2c :s32Ret :0
fd_i2c :s32Ret :0
[/code]

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 14:26:28
认可0
有点问题。
s32Ret=ioctl(fd_i2c, I2C_SLAVE,(0x34>>1));
printf("fd_i2c :s32Ret :%d \n",s32Ret);


在海思里面, I2C_SLAVE_FORCE 变成I2C_SLAVE  ,即使不接sensor ,return 也是0 。 难搞哦。

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 14:29:42
认可0
[code]#include
#include
#include
#include
#include

#define DHT12_ADDR  0x5c

int main(void)
{
    int fd, i;
    char addr = 0, data[5];

    fd = open("/dev/i2c-0", O_RDWR);
    if (fd < 0)
        return 1;

    ioctl(fd, I2C_TIMEOUT, 10);
    ioctl(fd, I2C_RETRIES, 2);


    struct i2c_msg msgs[2] = {
        {DHT12_ADDR, 0, 1, &addr},
        {DHT12_ADDR, I2C_M_RD, 5, data},
    };

    struct i2c_rdwr_ioctl_data idata = {
        .msgs = msgs,
        .nmsgs = 2,
    };

    if (ioctl(fd, I2C_RDWR, &idata) < 0)
    {
        perror("ioctl");
        return 2;
    }

    for (i = 0; i < 5; i++)
        printf("%d ", data[5]);

    close(fd);
    return 0;
}


网上的使用方法, 这样好吗? 也许还是不错的吧。[/code]

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-08-16 14:43:16
认可0
本帖最后由 alaode 于 2019-8-16 14:44 编辑

通过看 i2ctool 里面的实现方法,I2C_SLAVE 返回-1 说明是 busy。
然后 通过i2c_smbus_read_byte  判断是否存在 设备
[code]     i2c_smbus_access(file,I2C_SMBUS_READ,0,I2C_SMBUS_BYTE,&data))
                        args.read_write = read_write;
                        args.command = command;
                        args.size = size;
                        args.data = data;
                        return ioctl(file,I2C_SMBUS,&args);
[/code]

B.w.

0个粉丝

8

问答

0

专栏

2

资料

B.w. 2019-08-17 11:07:39
认可0
要让mipi 的 sensor支持热插?  

qn1575533508

0个粉丝

2

问答

3

专栏

3

资料

qn1575533508 2019-12-05 17:32:24
认可0
mark一下,也在研究这方面

qn1535876279

0个粉丝

0

问答

0

专栏

0

资料

qn1535876279 2019-12-10 09:56:27
认可0
HI_MPI_VI_EnableUserPic只支持离线方式,你是不是用的在线方式?

B.w.

0个粉丝

8

问答

0

专栏

2

资料

B.w. 2019-08-17 11:23:12
认可0
想法牛逼。。
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区