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.

DS90UB934-Q1: Initialisation Sequence for Deserializers

Part Number: DS90UB934-Q1

Hi all,

On top of the above link, I can't able to communicate with DS90UB933 Serializer from DS90UB934 Deserializer.

In 934 Deserializer, Address: 0x04 (Status Register), showing : 0xc0

this means, LOCK not happened between serializer and Deserializer and its not passed also.

In our board, we are not using any IO Expander for FPD Communication as like D3/EVM. I muxed GPIO to control all pins.

The steps i followed in pinmux for FPD Initialization via USB Type C (STP) :

  • Set PDB pin configured as output and set high for all FPD Link channels.
  • Set OEn pin configured as output and set high for all FPD Link channels
  • Lock and Pass pins are not set to High or Low.
  •     {0x01, 0x02},
  •     {0x4c, 0x01},
  •     {0x02, 0x9e},   
  •     {0x6D, 0x03},
  •     {0x58, 0x58},
  • Then passing Address and Alias Addres of serializer and sensor.

How to LOCK the SER-DESER to communicate via FPD STP (Shielded Twisted Pair) Cable ?

Can anyone help me, regarding the above issue. Its little-bit emergency.

Regards,

ARUNKUMAR VN

  • Hi,

    Can anyone reply for this above question.

    I am waiting for your response.

    Thanks & Regards,

    ARUNKUMAR V N

  • Hi Arun,

    The register settings look good to me. Could you check if the 933 is powered-up correctly and make sure you can communicate to the 933 via local I2C?

    Best,

    Jiashow

  • Hi Jiashow,

    There is some Hardware wire problem. Now OK.

    Now the LOCK  and PASS bits are High. Showing 0x04 status like below.

    Deser - 34 - Address: 0x4, Value: 0xcc 

    But in configuring Deserializer the serializer alias address not writing 0x00. Please see the Log below.

    Actual Serializer Address is configured to 0x58. I am writing Alias Address as 0x59. But its showing error.

     [HOST] [IPU2  ]     33.150430 s:  VIDEO_SENSOR: INST0 : I2C3 : I2C Addr = 0x61
     [HOST] [IPU2  ]     33.150552 s: src/bsputils_lvdsB1.c @ Line 450:
     [HOST] [IPU2  ]     33.150643 s: B1_Debug: Inside BspUtils_appConfSerDeSer DevID=4635
     [HOST] [IPU2  ]     33.150735 s: B1_DEBUG: BspUtils_appConfDeSer
     [HOST] [IPU2  ]     33.151040 s:  Write8 I2C3: DEV 0x34: WR 0x01 = 0x02
     [HOST] [IPU2  ]     33.151985 s:  Write8 I2C3: DEV 0x34: WR 0x4c = 0x01
     [HOST] [IPU2  ]     33.153022 s:  Read8 I2C3: DEV 0x34: RD 0x5b = 0xb0
     [HOST] [IPU2  ]     33.153144 s:  Deser - 34 - Address: 0x5b, Value: 0xb0
     [HOST] [IPU2  ]     33.154029 s:  Read8 I2C3: DEV 0x34: RD 0x5c = 0x00
     [HOST] [IPU2  ]     33.154151 s:  Deser - 34 - Address: 0x5c, Value: 0x0
     [HOST] [IPU2  ]     33.155218 s:  Read8 I2C3: DEV 0x34: RD 0x04 = 0xcc
     [HOST] [IPU2  ]     33.164978 s:  Deser - 34 - Address: 0x4, Value: 0xcc
     [HOST] [IPU2  ]     33.820594 s: src/bsp_deviceI2c.c @ Line 590:
     [HOST] [IPU2  ]     33.820716 s:  I2C3: DEV 0x59: WR 0x33 = 0x00 ... ERROR !!!
     [HOST] [IPU2  ]     33.820838 s: src/bsp_deviceI2c.c @ Line 612:
     [HOST] [IPU2  ]     33.820929 s:  I2C3: Error timeout 0 ms!!!
     [HOST] [IPU2  ]     33.820990 s: src/bsputils_lvdsB1.c @ Line 641:
     [HOST] [IPU2  ]     33.821082 s: Error: Failed to Configure ser for device 0x59
     [HOST] [IPU2  ]     33.822820 s:  VIDEO_SENSOR: MULTI_DES: Configuring instance 0 failed !!!
     [HOST] [IPU2  ]     33.823613 s: src/bsp_deviceI2c.c @ Line 775:
     [HOST] [IPU2  ]     33.823735 s:  I2C3: DEV 0x61: RD 0x300a ... ERROR !!!
     [HOST] [IPU2  ]     33.823857 s: src/bsp_deviceI2c.c @ Line 846:
     [HOST] [IPU2  ]     33.823949 s:  I2C3: Error timeout 0 ms!!!
     [HOST] [IPU2  ]     33.824315 s:  Assertion @ Line: 851 in /u/ee211029/Custom_Board/vision_sdk/apps/src/rtos/video_sensor/src/vid_sensor.c: status == SYSTEM_LINK_STATUS_SOK : failed !!!
     [HOST] [HOST  ]     31.479899 s:

    What may be the problem ?

    Regards,

    ARUNKUMAR V N

     

  • Hi Arun,

    In your code, I noticed that you are not setting register 0x5C. Could you set 0x5C = 0x58 and try to communicate to the serializer using I2C address 0x58 (8-bit)?

    Best,

    Jiashow

  • Hi Jiashow,

    Thanks for quick reply.

    0x58 is 7-bit Address.

    I am writing Serializer Alias Address to 0x5C already but didn't mentioned here. Please see the below configuration of Deserializer

    {0x01, 0x02},

    {0x4c, 0x01},

    {0x02, 0x9e},  

    {0x6D, 0x03},

    {0x58, 0x58},

    {0x5B, 0xB0}, -> 933 Serializer Address 0xB0 (8-bit)

    {0x5C, 0xBC}, -> 933 Serializer Alias Address 0xBC (8-bit)

    {0x5D, 0xC0}, -> Camera Address 0xC0 (8-bit)

    {0x65, 0xCC}, -> Camera Alias Address 0xCC (8-bit)

    Is anything missed ?

    Regards,

    ARUNKUMAR V N

  • Hi Arun,

    How come it returns a value of 0x00 if you read reg 0x5c?

    Also, since you are setting 0x5C = 0xBC, you should communicate to the serializer using register 0xBC.

  • Hi Jiashow,

    Yes, I am writing 0xBC to 0x5C. But, when i read it's showing zero (0x00).

    I am not getting, How come it returns a value of 0x00 if i read reg 0x5c?

    I am communicating via 0xBC address only.

    1) I tried to probe all the device (Ser, Deser, Sensor) address on the I2C Bus. I am getting only Deserializer address not the Serializer and Sensor Address.

    2) I enabled I2C Debug = TRUE and tried to debug. But i can see few debug messages of i2c writing and reading not fully. what may be problem ?

    3) Before i mentioned LOCK and PASS bits are not high in Deserializer. For that, our hardware team made changes in wire. Connected two direct wires from Serializer to Deserializer Capacitors FPD Data. Then I Can see High. But, Didn't got Data.

    Here, Instead of USB3.1 Communication, normal wire is not enough to get data right ??

    My Device communication setup is like this below :

    FPD Link III is STP Communication (USB-C Connector with USB3.1 Communication)

    Is there any changes can do and in this setup to get the serializer data ??

    Regards,

    ARUNKUMAR V N

  • Hi Arun,

    1) I tried to probe all the device (Ser, Deser, Sensor) address on the I2C Bus. I am getting only Deserializer address not the Serializer and Sensor Address.

    When you set register 0x5C, did you first select the port in register 0x4C? If 0x4C is not selected when you write to register 0x5C, you will not be able to write to the register.

    Are you seeing the issue with both the 954 and the 934? Or just the 934?

    2) I enabled I2C Debug = TRUE and tried to debug. But i can see few debug messages of i2c writing and reading not fully. what may be problem ?

    Could you clarify what's I2C debug = true? What do you mean by I2C not fully transmitted? Do you mean that the transaction starts but doesn't complete? Is it only to the 953/933, or also on the deserializers?

    3) Before i mentioned LOCK and PASS bits are not high in Deserializer. For that, our hardware team made changes in wire. Connected two direct wires from Serializer to Deserializer Capacitors FPD Data. Then I Can see High. But, Didn't got Data.

    Here, Instead of USB3.1 Communication, normal wire is not enough to get data right ??

    Are the serdes on the same board? Or you have a cable between the Ser and Des? Could you share your schematics?

  • Hi Jiashow,

    933 Serializer and 934 Deserializer are not in same board.

    • Camera's and Serializer's are in Remote Side.
    • Deserializer's, ISP are in Local Side.
    • Using STP communication between SerDes.

    At present, i am working on OV Camera + SerDes.

    Remote Side [ OV Sensor + 933 Ser ] ======(STP)====== [944 Deser + TDA2x SOC ] Local Side

    1) As you know and mentioned above. I am following the register write sequence like below,

    {0x01, 0x02}, {0x4c, 0x01}, {0x02, 0x9e},  {0x6D, 0x03}, {0x58, 0x58}, {0x5B, 0xB0},{0x5C, 0xBC},{0x5D, 0xC0},{0x65, 0xCC}, 

    I selected the port 0 in register 0x4C. Then, i am writing alias address to register 0x5C.

    2) PDK having function Int32 Bsp_deviceI2cDebugEnable(UInt32 enable)  to enable the I2C Debug prints. 

    After enable this function, i have to get all the registers read/write debug messages. But I am getting few registers write debug messages, not all the above registers mentioned in 1).

     [HOST] [IPU2  ]     33.151040 s:  Write8 I2C3: DEV 0x34: WR 0x01 = 0x02
     [HOST] [IPU2  ]     33.151985 s:  Write8 I2C3: DEV 0x34: WR 0x4c = 0x01
     [HOST] [IPU2  ]     33.153022 s:  Read8 I2C3: DEV 0x34: RD 0x5b = 0xb0
     [HOST] [IPU2  ]     33.154029 s:  Read8 I2C3: DEV 0x34: RD 0x5c = 0x00
     [HOST] [IPU2  ]     33.155218 s:  Read8 I2C3: DEV 0x34: RD 0x04 = 0xcc

    Regards,

    ARUNKUMAR V N

  • Hi,

    I am waiting for your reply.

    Kindly look into this and give support to understand and overcome this above problem.

    Regards,

    ARUNKUMAR V N

  • Hi Arun,

    Can you check if you receive an acknowledgement when you write to register reg 0x5C? If not, can you try to communicate to the serializer using the real I2C address? Can you also try multiple systems to see if you are seeing the same issues?

  • Hi Jiashow,

    There is some hardware problem faced before in our custom hardware. Now, Its cleared. I can read Deserializer, Serializer, Sensor.

    But, I am not able to capture RAW data from VIP.

    BTW when i probe on Data lines, Data traffic is there. So, I am looking in VIP configuration (Software Side).

    But, I am not getting interrupt in VIP. Deserializer Data is in Rising Edge. But, For Experment : I checked with Rising Edge and Falling Edge.

    In Serializer : General Status Register Reads (0x0C) : Valid PCLK not Detected. What's this mean ?

    Please check the register status of Deserializer and Serializer.

    7888.Ser-Deser.txt
    ===============================================================================
    DeSerializer - 934
    ===============================================================================
     [HOST] [IPU2  ]     58.975050 s:  Write8 I2C3: DEV 0x34: WR 0x01 = 0x02 
     [HOST] [IPU2  ]     58.975568 s:  Write8 I2C3: DEV 0x34: WR 0xb0 = 0x04 
     [HOST] [IPU2  ]     58.976544 s:  Write8 I2C3: DEV 0x34: WR 0xb1 = 0x04 
     [HOST] [IPU2  ]     58.977734 s:  Write8 I2C3: DEV 0x34: WR 0xb2 = 0x1f 
     [HOST] [IPU2  ]     58.978557 s:  Write8 I2C3: DEV 0x34: WR 0xb0 = 0x04 
     [HOST] [IPU2  ]     58.979533 s:  Write8 I2C3: DEV 0x34: WR 0xb1 = 0x14 
     [HOST] [IPU2  ]     58.980540 s:  Write8 I2C3: DEV 0x34: WR 0xb2 = 0x1f 
     [HOST] [IPU2  ]     58.981547 s:  Write8 I2C3: DEV 0x34: WR 0x41 = 0xb6 
     [HOST] [IPU2  ]     58.982706 s:  Write8 I2C3: DEV 0x34: WR 0x42 = 0x75 
     [HOST] [IPU2  ]     58.983560 s:  Write8 I2C3: DEV 0x34: WR 0x4c = 0x01 
     [HOST] [IPU2  ]     58.984536 s:  Write8 I2C3: DEV 0x34: WR 0xd2 = 0x9c 
     [HOST] [IPU2  ]     58.985542 s:  Write8 I2C3: DEV 0x34: WR 0xb0 = 0x05 
     [HOST] [IPU2  ]     58.986549 s:  Write8 I2C3: DEV 0x34: WR 0xb1 = 0x03 
     [HOST] [IPU2  ]     58.987708 s:  Write8 I2C3: DEV 0x34: WR 0xb2 = 0x06 
     [HOST] [IPU2  ]     58.988562 s:  Write8 I2C3: DEV 0x34: WR 0xb1 = 0x04 
     [HOST] [IPU2  ]     58.989538 s:  Write8 I2C3: DEV 0x34: WR 0xb2 = 0x06 
     [HOST] [IPU2  ]     58.990544 s:  Write8 I2C3: DEV 0x34: WR 0x02 = 0x9e 
     [HOST] [IPU2  ]     58.991551 s:  Write8 I2C3: DEV 0x34: WR 0x6d = 0x03 
     [HOST] [IPU2  ]     58.992710 s:  Write8 I2C3: DEV 0x34: WR 0x58 = 0x58 
     [HOST] [IPU2  ]     58.993564 s:  Write8 I2C3: DEV 0x34: WR 0x5b = 0xb0 
     [HOST] [IPU2  ]     58.994540 s:  Write8 I2C3: DEV 0x34: WR 0x5c = 0xb0 
     [HOST] [IPU2  ]     58.995546 s:  Write8 I2C3: DEV 0x34: WR 0x5d = 0xc0 
     [HOST] [IPU2  ]     58.996553 s:  Write8 I2C3: DEV 0x34: WR 0x65 = 0xc0 
    
     [HOST] [IPU2  ]     58.997712 s:  Read8 I2C3: DEV 0x34: RD 0x5b = 0xb0 
     [HOST] [IPU2  ]     58.998566 s:  Read8 I2C3: DEV 0x34: RD 0x5c = 0xb0 
     [HOST] [IPU2  ]     58.999542 s:  Read8 I2C3: DEV 0x34: RD 0x5d = 0xc0 
     [HOST] [IPU2  ]     59.000549 s:  Read8 I2C3: DEV 0x34: RD 0x5e = 0x00 
     [HOST] [IPU2  ]     59.001555 s:  Read8 I2C3: DEV 0x34: RD 0x5f = 0x00 
     [HOST] [IPU2  ]     59.002714 s:  Read8 I2C3: DEV 0x34: RD 0x65 = 0xc0 
     [HOST] [IPU2  ]     59.003568 s:  Read8 I2C3: DEV 0x34: RD 0x66 = 0x00 
     [HOST] [IPU2  ]     59.004544 s:  Read8 I2C3: DEV 0x34: RD 0x67 = 0x00 
     [HOST] [IPU2  ]     59.005551 s:  Read8 I2C3: DEV 0x34: RD 0x3b = 0x01 
     [HOST] [IPU2  ]     59.006557 s:  Read8 I2C3: DEV 0x34: RD 0x3c = 0x14 
     [HOST] [IPU2  ]     59.007716 s:  Read8 I2C3: DEV 0x34: RD 0x3e = 0x00 
     [HOST] [IPU2  ]     59.008570 s:  Read8 I2C3: DEV 0x34: RD 0x02 = 0x9e 
     [HOST] [IPU2  ]     59.009546 s:  Read8 I2C3: DEV 0x34: RD 0x05 = 0x01 
     [HOST] [IPU2  ]     59.010553 s:  Read8 I2C3: DEV 0x34: RD 0x06 = 0x00 
     [HOST] [IPU2  ]     59.011559 s:  Read8 I2C3: DEV 0x34: RD 0x08 = 0x1c 
     [HOST] [IPU2  ]     59.012718 s:  Read8 I2C3: DEV 0x34: RD 0x09 = 0x10 
     [HOST] [IPU2  ]     59.013542 s:  Read8 I2C3: DEV 0x34: RD 0x0a = 0x7a 
     [HOST] [IPU2  ]     59.014548 s:  Read8 I2C3: DEV 0x34: RD 0x0b = 0x7a 
     [HOST] [IPU2  ]     59.015555 s:  Read8 I2C3: DEV 0x34: RD 0x0d = 0xb9 
     [HOST] [IPU2  ]     59.016561 s:  Read8 I2C3: DEV 0x34: RD 0x0e = 0x08 
     [HOST] [IPU2  ]     59.017720 s:  Read8 I2C3: DEV 0x34: RD 0x0f = 0x7f 
     [HOST] [IPU2  ]     59.018575 s:  Read8 I2C3: DEV 0x34: RD 0x10 = 0x00 
     [HOST] [IPU2  ]     59.019551 s:  Read8 I2C3: DEV 0x34: RD 0x11 = 0x00 
     [HOST] [IPU2  ]     59.020557 s:  Read8 I2C3: DEV 0x34: RD 0x12 = 0x00 
     [HOST] [IPU2  ]     59.021564 s:  Read8 I2C3: DEV 0x34: RD 0x13 = 0x00 
     [HOST] [IPU2  ]     59.022723 s:  Read8 I2C3: DEV 0x34: RD 0x18 = 0x00 
     [HOST] [IPU2  ]     59.023546 s:  Read8 I2C3: DEV 0x34: RD 0x23 = 0x00 
     [HOST] [IPU2  ]     59.024553 s:  Read8 I2C3: DEV 0x34: RD 0x24 = 0x00 
     [HOST] [IPU2  ]     59.025559 s:  Read8 I2C3: DEV 0x34: RD 0x25 = 0x00 
     [HOST] [IPU2  ]     59.026566 s:  Read8 I2C3: DEV 0x34: RD 0x4c = 0x01 
     [HOST] [IPU2  ]     59.027725 s:  Read8 I2C3: DEV 0x34: RD 0x4d = 0x13 
     [HOST] [IPU2  ]     59.028548 s:  Read8 I2C3: DEV 0x34: RD 0x4e = 0x04 
     [HOST] [IPU2  ]     59.029555 s:  Read8 I2C3: DEV 0x34: RD 0x4f = 0x32 
     [HOST] [IPU2  ]     59.030561 s:  Read8 I2C3: DEV 0x34: RD 0x50 = 0x83 
     [HOST] [IPU2  ]     59.031568 s:  Read8 I2C3: DEV 0x34: RD 0x55 = 0x00 
     [HOST] [IPU2  ]     59.032727 s:  Read8 I2C3: DEV 0x34: RD 0x56 = 0x00 
     [HOST] [IPU2  ]     59.033550 s:  Read8 I2C3: DEV 0x34: RD 0x58 = 0x58 
     [HOST] [IPU2  ]     59.034557 s:  Read8 I2C3: DEV 0x34: RD 0x6d = 0x03 
     [HOST] [IPU2  ]     59.035563 s:  Read8 I2C3: DEV 0x34: RD 0x6e = 0x88 
     [HOST] [IPU2  ]     59.036539 s:  Read8 I2C3: DEV 0x34: RD 0x6f = 0x88 
     [HOST] [IPU2  ]     59.037699 s:  Read8 I2C3: DEV 0x34: RD 0x77 = 0xc5 
     [HOST] [IPU2  ]     59.038553 s:  Read8 I2C3: DEV 0x34: RD 0xf8 = 0x00 
     [HOST] [IPU2  ]     59.039559 s:  Read8 I2C3: DEV 0x34: RD 0xf9 = 0x00 
     [HOST] [IPU2  ]     59.040566 s:  Read8 I2C3: DEV 0x34: RD 0x04 = 0xcc 
    
    ===============================================================================
    Serializer - 933
    ===============================================================================
     [HOST] [IPU2  ]     59.377844 s:  Write8 I2C3: DEV 0x58: WR 0x01 = 0x33 
     [HOST] [IPU2  ]     59.379613 s:  Read8 I2C3: DEV 0x58: RD 0x01 = 0x30 
     [HOST] [IPU2  ]     59.379887 s:  Write8 I2C3: DEV 0x58: WR 0x03 = 0xc7 
     [HOST] [IPU2  ]     59.390563 s:  Write8 I2C3: DEV 0x58: WR 0x0d = 0x99 
     [HOST] [IPU2  ]     59.401543 s:  Write8 I2C3: DEV 0x58: WR 0x05 = 0x05 
     [HOST] [IPU2  ]     59.412706 s:  Write8 I2C3: DEV 0x58: WR 0x35 = 0x02 
     [HOST] [IPU2  ]     59.423564 s:  Write8 I2C3: DEV 0x58: WR 0x11 = 0x19 
     [HOST] [IPU2  ]     59.434545 s:  Write8 I2C3: DEV 0x58: WR 0x12 = 0x19 
     [HOST] [IPU2  ]     59.446623 s:  Read8 I2C3: DEV 0x58: RD 0x03 = 0xc7 
     [HOST] [IPU2  ]     59.447782 s:  Read8 I2C3: DEV 0x58: RD 0x05 = 0x15 
     [HOST] [IPU2  ]     59.448606 s:  Read8 I2C3: DEV 0x58: RD 0x06 = 0x68 
     [HOST] [IPU2  ]     59.449612 s:  Read8 I2C3: DEV 0x58: RD 0x07 = 0x00 
     [HOST] [IPU2  ]     59.450619 s:  Read8 I2C3: DEV 0x58: RD 0x08 = 0x00 
     [HOST] [IPU2  ]     59.451625 s:  Read8 I2C3: DEV 0x58: RD 0x09 = 0x00 
     [HOST] [IPU2  ]     59.452784 s:  Read8 I2C3: DEV 0x58: RD 0x0a = 0x00 
     [HOST] [IPU2  ]     59.453608 s:  Read8 I2C3: DEV 0x58: RD 0x0b = 0x00 
     [HOST] [IPU2  ]     59.454614 s:  Read8 I2C3: DEV 0x58: RD 0x0c = 0x11 
     [HOST] [IPU2  ]     59.455621 s:  Read8 I2C3: DEV 0x58: RD 0x0d = 0x99 
     [HOST] [IPU2  ]     59.456627 s:  Read8 I2C3: DEV 0x58: RD 0x0e = 0x35 
     [HOST] [IPU2  ]     59.457786 s:  Read8 I2C3: DEV 0x58: RD 0x0f = 0x00 
     [HOST] [IPU2  ]     59.458610 s:  Read8 I2C3: DEV 0x58: RD 0x10 = 0x17 
     [HOST] [IPU2  ]     59.459616 s:  Read8 I2C3: DEV 0x58: RD 0x11 = 0x19 
     [HOST] [IPU2  ]     59.460623 s:  Read8 I2C3: DEV 0x58: RD 0x12 = 0x19 
     [HOST] [IPU2  ]     59.461599 s:  Read8 I2C3: DEV 0x58: RD 0x13 = 0x00 
     [HOST] [IPU2  ]     59.462788 s:  Read8 I2C3: DEV 0x58: RD 0x14 = 0x00 
     [HOST] [IPU2  ]     59.463612 s:  Read8 I2C3: DEV 0x58: RD 0x29 = 0x06 
     [HOST] [IPU2  ]     59.464619 s:  Read8 I2C3: DEV 0x58: RD 0x2a = 0x00 
     [HOST] [IPU2  ]     59.465625 s:  Read8 I2C3: DEV 0x58: RD 0x2d = 0x00 
     [HOST] [IPU2  ]     59.466601 s:  Read8 I2C3: DEV 0x58: RD 0x35 = 0x0a 
    ===============================================================================
    
    

    Inform me for any changes, need to do to get data.

    Regards,

    ARUNKUMAR V N

  • Hi Arun,

    Could you check if you are supplying a valid PCLK to the device?

    Best,

    Jiashow

  • Hi Jaishow,

    Yes, I measured in CRO both sensor side and board side. Both side I'm getting PCLK = 96 MHz.

    HSYNC / VSYNC also fine.

    Have you saw the register dump of deserializer and serializer??? 

    Is anything wrong in that values ??

    Regards

    Arunkumar

  • Hi Arunkumar,

    Has this issue also been resolved with the change to the format of the VIP frames as discussed in this thread: https://e2e.ti.com/support/interface/f/138/t/852679 ?

    If not, please give a quick summary of the current state of the debug and let us know what issues still remain.  

    Sincerely,
    Bryan Kahler