This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

8168 tvp7002 驱动问题

Other Parts Discussed in Thread: TVP7002, TVP5158, THS7368, THS8200

问题描述:

     目前的开发包是:DVRRDK_04.01.00.02,开发包里的视频采集芯片是tvp5158,而开发板(DM8168-EVM)的采集芯片是tvp7002 + ths7368 ,在目录 DVRRDK_04.01.00.02/ti_tools/hdvpss/dvr_rdk_hdvpss/packages/ti/psp/devices 中找到了tvp5158 和 tvp7002 的子目录,如果理解没有错的话,这里应该就是这两种芯片的驱动(如果错误请指正)。在目录 DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_linux/devices 下只有 tvp5158子目录而不包含 tvp7002 子目录,也就是说,开发包中的mcfw只加载了tvp5158的驱动,而没有加载tvp7002。

查看boot的log信息发现确实只加载了tvp5158的驱动:

usbcore: registered new interface driver usbhid                                 
usbhid: USB HID core driver                                                     
notify_init : notify drivercreated  for  remote proc id 2 at physical Address 00
usbcore: registered new interface driver snd-usb-audio                          
Registered tvp5158 audio codec                                                  
asoc: tvp5158-hifi <-> davinci-mcasp.0 mapping ok                               
asoc: tlv320aic3x-hifi <-> davinci-mcasp.2 mapping ok                           
asoc: HDMI-DAI-CODEC <-> hdmi-dai mapping ok                                    
ALSA device list:                                                               
  #0: TI81XX SOUND0                                                             
  #1: TI81XX SOUND1         

问题1:如何在开发包中实现 tvp7002的驱动,需要添加或修改那些模块?

    然后我试着去运行了开发包中提供的demo,选择 VCAP + VENC + VDEC + VDIS  - Progressive SD Encode + Decode ,设置必要参数之后,发现视频采集程序检测不到tvp7002,查看源代码(文件为: dvr_rdk/mcfw/src_linux/mcfw_api/usecases/ti816x/multich_progressive_vcap_venc_vdec_vdis.c)该demo中的采集芯片全部是tvp5158,同时,在开发包中其他涉及到视频采集部分也是用的tvp5158来实现,与我的开发板不匹配。

问题2:将视频采集芯片又5158变为7002,是否需要将demo中的所有tvp5158修改为tvp7002,并根据7002的寄存器配置修改参数?(个人感觉这个工作量比较大,也不合理) 是否在tvp7002采集的demo?

例如:UInt32 tvp_i2c_addr = Device_getVidDecI2cAddr(DEVICE_VID_DEC_TVP5158_DRV,0);

修改为:UInt32 tvp_i2c_addr = Device_getVidDecI2cAddr(DEVICE_VID_DEC_TVP7002_DRV,0);

说明:之前提过类似的问题,非常感谢Eason Wang 也给我提供的解决办法和思路,但是问题还没有解决,所以又详细整理了问题。

        

          夏安

祝好!

  • 你好;

        关于tvp7002的驱动,在DVRRDK中可以参考下面的实现:

        DVRRDK_04.01.00.02/ti_tools/hdvpss/dvr_rdk_hdvpss/packages/ti/psp/devices/tvp7002

        这里的实现是通过m3来控制i2c 配置tvp7002的;

    ########################################

        你调试的 DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_linux/devices

        这个路径是通过a8端来控制i2c,来配置外围芯片状态的

     ########################################

        你可以参考上面tvp7002的实现

      

  • 谢谢您的回复,我已经大体知道解决思路了。问题正在解决中......

    顺便问一下,请问您的 DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_linux/devices是否包含目录tvp7002(即利用A8来控制I2C的示例程序),如果有的话,希望能发给我一份(我的dvrrdk中该目录下只包含tvp5158和ths8200等)。

            夏安

    祝好!

      

  • 你好;

    DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_linux/devices 下面没有tvp7002的驱动程序;

    你可以参数arm端tvp5158的模式添加,参考 m3中配置tvp7002的来实现;

  • 刚找到一份,你从hdvpss中移到dvrrdk 中的,你可以参考一下;

  • 非常感谢,正在按照tvp5158的模式进行修改。(其实是想减少工作量,如果已经有实现好的就不用我自己修改啦~~)

    不过自己修改一次会对视频采集模块更加了解。

    再次感谢!

    祝工作顺利!

  • 您好!

            参照mcfw中A8控制tvp5158的实现方式,我将hdvpss中的tvp7002驱动移植到了dvr_rdk/mcfw/src_linux/devices 中,并在tvp7002上实现了以下三个方法:


    Device_Handle Device_tvp7002Create ( UInt32 drvId,
                                    UInt32 instanceId,
                                    Ptr createArgs,
                                    Ptr createStatusArgs);

    Int32 Device_tvp7002Delete ( Device_Handle handle, Ptr deleteArgs );

    Int32 Device_tvp7002Control ( Device_Handle handle,
                               UInt32 cmd, Ptr cmdArgs, Ptr cmdStatusArgs );

    将demo中视频采集芯片由5158改为7002,程序编译通过,在开发板上运行demo,选择6:

     6: VCAP + VENC + VDEC + VDIS  - Progressive HD+SD Encode + Decode

    设置: file_write------disable    audio-------disable

    没有接视频采集源,即没有VGA或HDMI或YPbPr输入,结果有大量的打印信息输出,不知道该怎么分析,希望能给点帮助。

    (我想用电脑通过VGA线输入模拟视频采集,或者通过高清摄像头从HDMI输入)

    打印的log信息见附件。

    谢谢!

    祝工作顺利!

  • 1. 以上的输出信息有大量的冗余信息,不知道哪些是与采集相关的有用信息?

    2. tvp7002  VGA输入或者HDMI输入需要修改哪些参数?

    3.  需要在什么地方修改?是在dvr_rdk/mcfw/src_linux/devices/tvp7002(这是我依照tvp5158的实现写的tvp7002的驱动),还是在ti_tools/hdvpss/dvr_rdk_hdvpss/packages/ti/psp/devices/tvp7002里边修改vpsdrv_tvp7002Settings.h。我的理解是在 ti_tools中已经实现了m3加载tvp7002的驱动,因此在demo中,只需要修改a8对7002的控制即可。不知道是否正确。

  • 请问一下:No Video Detected 是什么原因?

     AUDIO: Do you enable Audio <Y/N>: n
     [FBDEV]
     [FBDEV] FB: Starting !!!
     [FBDEV] FB: Opened device [/dev/fb0] (fd=24) !!!
     [FBDEV]
     [FBDEV] Fix Screen Info
     [FBDEV] ---------------
     [FBDEV] Line Length - 2560
     [FBDEV] Physical Address = 8e600000
     [FBDEV] Buffer Length = 8388608
     [FBDEV]
     [FBDEV]
     [FBDEV] Var Screen Info
     [FBDEV] ---------------
     [FBDEV] Xres - 1280
     [FBDEV] Yres - 720
     [FBDEV] Xres Virtual - 1280
     [FBDEV] Yres Virtual - 720
     [FBDEV] Bits Per Pixel - 16
     [FBDEV] Pixel Clk - 6734
     [FBDEV] Rotation - 0
     [FBDEV]
     [FBDEV]
     [FBDEV] Reg Params Info
     [FBDEV] ---------------
     [FBDEV] region 0, postion 0 x 0, prioirty 1
     [FBDEV] first 1, last 1
     [FBDEV] sc en 0, sten en 0
     [FBDEV] tran en 0, type 0, key 0
     [FBDEV] blend 0, alpha 0
     [FBDEV] bb en 0, alpha 0
     [FBDEV]
     [FBDEV]
     [FBDEV] ### BUF SIZE = 1843200 Bytes !!!
     [FBDEV]
     [FBDEV]
     [FBDEV] Fix Screen Info
     [FBDEV] ---------------
     [FBDEV] Line Length - 2560
     [FBDEV] Physical Address = 8e600000
     [FBDEV] Buffer Length = 8388608
     [FBDEV]
     [FBDEV]
     [FBDEV] Var Screen Info
     [FBDEV] ---------------
     [FBDEV] Xres - 1280
     [FBDEV] Yres - 720
     [FBDEV] Xres Virtual - 1280
     [FBDEV] Yres Virtual - 720
     [FBDEV] Bits Per Pixel - 16
     [FBDEV] Pixel Clk - 6734
     [FBDEV] Rotation - 0
     [FBDEV]
     [FBDEV]
     [FBDEV] Reg Params Info
     [FBDEV] ---------------
     [FBDEV] region 0, postion 0 x 0, prioirty 1
     [FBDEV] first 1, last 1
     [FBDEV] sc en 0, sten en 0
     [FBDEV] tran en 0, type 0, key 0
     [FBDEV] blend 0, alpha 0
     [FBDEV] bb en 0, alpha 0
     [FBDEV]
     [FBDEV]
     [FBDEV] ### BUF SIZE = 1843200 Bytes !!!
     [FBDEV]
     [FBDEV] grpx_fb_draw ...
     [FBDEV] grpx_fb_draw ... Done !!!
     [FBDEV] FB: Start DONE !!!
     [FBDEV]
    [HOST]
    ThreadName:Scd_bitsWriteMain_0,ThreadID:634

    ********* Entered usecase HdSdDvr <816x> Cap/Enc/Dec/Dis

     ------------- trying to detectBoard ---------
     3363: MCFW  : CPU Revision [ES2.0] !!!
     -------------  Board - detected   --------
    twl_i2c_addr = 0 , tvp_i2c_addr = 93
    DEVICE_TW2968_REG_DEVICE_ID not found

    TVP_CHIP_ID_READ:0x6720
    multich_hdsddvr_get_videodecoder_device_id = 1025 
     VCAP: DEVICE-0 (0x5d): Chip ID 0x7002, Rev 0x0000, Firmware 0x0000 !!!
     VCAP: DEVICE-0 (0x5d):  NO Video Detected !!!
     VCAP: DEVICE-1 (0x00): Chip ID 0x7002, Rev 0x0000, Firmware 0x0000 !!!
     VCAP: DEVICE-1 (0x00):  NO Video Detected !!!
     VCAP: DEVICE-2 (0x5c): Chip ID 0x7002, Rev 0x0000, Firmware 0x0000 !!!
     VCAP: DEVICE-2 (0x5c):  NO Video Detected !!!
     VCAP: DEVICE-3 (0x00): Chip ID 0x7002, Rev 0x0000, Firmware 0x0000 !!!
     VCAP: DEVICE-3 (0x00):  NO Video Detected !!!
    multich_hdsddvr_configure_extvideodecoder_prm() ---- done
    -----------set  Capture Link  --------change    pCaptureInstPrm->videoDecoderId  = 1025;
     [m3vpss ]  27688: CAPTURE: Create in progress !!!
     [m3vpss ]  27718: CAPTURE: VIP0 PortA capture mode is [ 8-bit, Non-mux Embedded Sync] !!!
     [m3vpss ] CAPTURE:Create args numBufsPerCh[4] < min[6]Overriding create args
     [m3vpss ]  UTILS: DMA: Allocated CH (TCC) = 58 (58)
     [m3vpss ]  UTILS: DMA: 0 of 4: Allocated PaRAM = 58 (0x49004740)
     [m3vpss ]  UTILS: DMA: 1 of 4: Allocated PaRAM = 64 (0x49004800)
     [m3vpss ]  UTILS: DMA: 2 of 4: Allocated PaRAM = 65 (0x49004820)
     [m3vpss ]  UTILS: DMA: 3 of 4: Allocated PaRAM = 66 (0x49004840)
     [m3vpss ] CAPTURE::HEAPID:0    USED:328
     [m3vpss ] CAPTURE::HEAPID:4    USED:29030400
     [m3vpss ]  27835: CAPTURE: Create Done !!!
     [m3vpss ]  27836: SELECT_0: OUT QUE0: OUT CH0: IN CH0: 1920 x 1080, pitch = (3840, 3840) [PROGRESSIVE] [NON-TILED ]
     [m3vpss ]  27837: SELECT_0: OUT QUE0: OUT CH1: IN CH1: 0 x 0, pitch = (0, 0) [INTERLACED ] [NON-TILED  ]
     [m3vpss ]  27837: SELECT_0: OUT QUE1: OUT CH0: IN CH2: 0 x 0, pitch = (0, 0) [INTERLACED ] [NON-TILED  ]
     [m3vpss ]  27837: SELECT_0: OUT QUE1: OUT CH1: IN CH3: 0 x 0, pitch = (0, 0) [INTERLACED ] [NON-TILED  ]
     [m3vpss ]  27837: SELECT_0: OUT QUE1: OUT CH2: IN CH4: 0 x 0, pitch = (0, 0) [INTERLACED ] [NON-TILED  ]
     [m3vpss ]  27837: SELECT_0: OUT QUE1: OUT CH3: IN CH5: 0 x 0, pitch = (0, 0) [INTERLACED ] [NON-TILED  ]
     [m3vpss ]  27837: SELECT_0: OUT QUE1: OUT CH4: IN CH6: 0 x 0, pitch = (0, 0) [INTERLACED ] [NON-TILED  ]
     [m3vpss ]  27838: SELECT_0: OUT QUE1: OUT CH5: IN CH7: 0 x 0, pitch = (0, 0) [INTERLACED ] [NON-TILED  ]
     [m3vpss ]  27838: SELECT_0: OUT QUE1: OUT CH6: IN CH8: 0 x 0, pitch = (0, 0) [INTERLACED ] [NON-TILED  ]
     [m3vpss ]  27838: SELECT_0: OUT QUE1: OUT CH7: IN CH9: 0 x 0, pitch = (0, 0) [INTERLACED ] [NON-TILED  ]
     [m3vpss ]  27838: SELECT   : Create Done !!!
     [m3vpss ]  27842: DUP:  0: Format: PROGRESSIVE, 1920 x 1080
     [m3vpss ]  27842: DUP:  1: Format: INTERLACED , 0 x 0
     [m3vpss ]  27843: DUP   : Create Done !!!
     [m3vpss ]  27844: DEI    : Create in progress !!!
     [m3vpss ] DEI: Ch 0, Outformat is PROGRESSIVE
     [m3vpss ]  27864: DEI: OUT0:  0: Format: PROGRESSIVE, 0xaffcbc80, 960 x 540, 4 frames
     [m3vpss ] DEI: Ch 1, Outformat is PROGRESSIVE
     [m3vpss ] !!!XDC RUNTIME ASSERT FAILED
     [m3vpss ] xdc.runtime.Error @ ti.sdo.ipc.heaps.HeapMemMP: line 573:
     [m3vpss ] assertion failure: A_zeroBlock: Cannot allocate size 0

  • 你好;

          你这个是通过tvp7002没有检测到视频信号;

          你可以读一下下面几组寄存器

                   0x14h Sync Detect Status

                   0x37h 0x38h Lines Per Frame Status

                   0x39h 0x3Ah Clocks Per Line Status

                   0x3Bh HSYNC Width

                   0x3ch VSYNC Width 

          的状态是否正常;

     

         输入信号是否正常,相关的配置是否正确,再去查代码;

         你可以通过程序去读寄存器,也可以直接通过 i2c tools 去读;

     

  • 你好,我现在调试TVP7002,读取这几个寄存器的值均为0;是否哪里没配置好?(不带EEPROM)

  • davin liu 说:

    你好,我现在调试TVP7002,读取这几个寄存器的值均为0;是否哪里没配置好?(不带EEPROM)

    是不是你的i2c接口有问题呢,其他地址的值可以读出来吗?

  • I2C读取其他寄存器都是正常的,就是你上面提到的那5个只读的寄存器读取异常,一直为0;搞不懂是哪里问题。(目前是有显示的,效果不理想)