I2CのREAD

Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
user_3987996
Level 3
Level 3
25 replies posted 10 replies posted 5 replies posted

添付ファイルのSingle Read Mode operationの動作をCYPRESSのAPIを使用して

実現できるのでしょうか?

書き込みが正しくできているか確認したいのですが、上手く関数が作れません。

ご教示ください。

0 件の賞賛
1 解決策
HirotakaT_91
Moderator
Moderator
Moderator
500 replies posted 250 replies posted 100 replies posted

はい、可能です。

添付いただいた日本ケミコンのNCM-03Vのアプリケーションノートを見る限り、通常のI2CのRead動作なので、問題なくCyU3PI2cReceiveBytes() APIで実装可能です。

ctrlMaskの2bit目を1にし、Start locationの位置をSingle Byte用に設定します。

I2Cでは、Read/Write動作はSlave addressに続いて指定されますので、リピートスタートコンディション(Sr)の後のSlave addressを格納しているバッファの最下位ビットを1に指定します。

以下、ご参考までにコード例を提示致します。

I2C Single Read Operation example code on FX3

CyU3PReturnStatus_t

sensorSingleReadOperation ( uint8_t slaveAddr, uint8_t regAddr, uint8_t buf)

{

    CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;

    CyU3PI2cPreamble_t preamble;

    preamble.buffer[0] = slaveAddr;

    preamble.buffer[1] = regAddr;

    preamble.buffer[2] = slaveAddr | 0x1;

    preamble.length    = 3;

    preamble.ctrlMask  = 0x0002;              /*  Send start bit after 2nd byte (buffer[1]) of preamble. */            

    apiRetStatus = CyU3PI2cReceiveBytes (&preamble, buf, 1, 0);

    SensorI2CAccessDelay (apiRetStatus);

    return apiRetStatus;

}

上記のコード例を参考に動作するか試していただければと思います。

よろしくお願い致します。

Hirotaka Takayama

元の投稿で解決策を見る

5 返答(返信)
HirotakaT_91
Moderator
Moderator
Moderator
500 replies posted 250 replies posted 100 replies posted

はい、可能です。

添付いただいた日本ケミコンのNCM-03Vのアプリケーションノートを見る限り、通常のI2CのRead動作なので、問題なくCyU3PI2cReceiveBytes() APIで実装可能です。

ctrlMaskの2bit目を1にし、Start locationの位置をSingle Byte用に設定します。

I2Cでは、Read/Write動作はSlave addressに続いて指定されますので、リピートスタートコンディション(Sr)の後のSlave addressを格納しているバッファの最下位ビットを1に指定します。

以下、ご参考までにコード例を提示致します。

I2C Single Read Operation example code on FX3

CyU3PReturnStatus_t

sensorSingleReadOperation ( uint8_t slaveAddr, uint8_t regAddr, uint8_t buf)

{

    CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;

    CyU3PI2cPreamble_t preamble;

    preamble.buffer[0] = slaveAddr;

    preamble.buffer[1] = regAddr;

    preamble.buffer[2] = slaveAddr | 0x1;

    preamble.length    = 3;

    preamble.ctrlMask  = 0x0002;              /*  Send start bit after 2nd byte (buffer[1]) of preamble. */            

    apiRetStatus = CyU3PI2cReceiveBytes (&preamble, buf, 1, 0);

    SensorI2CAccessDelay (apiRetStatus);

    return apiRetStatus;

}

上記のコード例を参考に動作するか試していただければと思います。

よろしくお願い致します。

Hirotaka Takayama

ありがとうございます。

おかげさまでREADする事ができました。

但し、ある特定のアドレスだけ書き込みが出来ない状態です。

動作の一部を抜粋すると

/* Start up */

buf[0] = 0x00;

SensorWrite1 (0xDC, 0x03, buf);

SensorRead1 (0xDC, 0x03, buf2);

buf[0] = 0x00;

SensorWrite1 (0xDC, 0x59, buf); //output Hi-z release

SensorRead1 (0xDC, 0x59, buf2);

buf[0] = 0x04;

SensorWrite1 (0xDC, 0x1D, buf); //refgain0

SensorRead1 (0xDC, 0x1D, buf2); //refgain0 resd

buf[0] = 0x10;

SensorWrite1 (0xDC, 0x21, buf); //refgain4

SensorRead1 (0xDC, 0x21, buf2);

SensorWrite1 は私が作った関数で、0xDCがスレーブアドレスで2項目目がレジスタアドレス、3項目目がデータですが、

レジスタアドレスが、0x03,0x1D,0x21の時は書き込んだ値がリードできるのですが、0x59の時だけ何を書き込んでも

0x60が返ってきます。

関数内のリターンは書き込み時、読み込み時とも'0'が返ってきているので、正常に終了した状態です。

0x59が肝心のレジスタの為、これが下記変わらないので、イメージセンサーが動作しません。

今までにこのような事例はありませんでしょうか?

4月中に解決する必要があり、可能であればデバッグして頂けるところを紹介して欲しいくらいです。

以上、宜しくお願いします。

0 件の賞賛

APIの返り値としてSUCCESSが返って来ていますので、FX3としては宣言されたAPIでI2C Write, I2C Readを行っており、受信側である日本ケミコンNCM03-VからACK返ってきていると考えられます。

また、いかなる値を書いてもセンサから0x60 (Default値)が返ってくる点から、センサ側の何かしらの理由により値が書き換わっていない(またはDefault値に戻る?)のではないかと思われます。

そのため、今いただいている情報だけですと、FX3の問題ではなくセンサ側の問題(I2C通信を行う前までの電源立ち上がりタイミングシーケンス等?)に思えます。

日本ケミコンまたは日本ケミコンの代理店等にご連絡いただければと思います。

よろしくお願い致します。

Hirotaka Takayama

lock attach
Attachments are accessible only for community members.

色々ありがとうございます。

延長のフレキを外すことで、PCLK等を確認する事ができるようになりました。

現在、

①PCLK,HSYMC,VSYNC,DATA[0:7]が確認できるようになった。

 カメラを動かすとデータも変わる事を確認済みです。

②USB2.0からは何らかの信号は出ているが、USB3.0からは信号が出ていない。

③デバイスマネージャでカメラとしての認識はできている。

教えて頂いた情報で、

sensor.cのI2C部分を修正

uvc.cのMCLKの生成とSTDBY信号のLOW固定

の修正はしております。

添付にサンプルソフトの仕様と弊社の基板で実現したい仕様を纏めました。

日本ケミコンの仕様を実現する為に、何処をどのように修正したら良いかご教示ください。

0 件の賞賛

サンプルで提供しているDescriptor Fileで設定している解像度と異なるのでDescriptor File(cyfxuvcdscr.c)の修正が必要です。

Change Resolution in FX3 UVC Camera - KBA220269

USB 3.0で通信がないとのことですが、SuperSpeedでenumerationされているかご確認ください。

確認方法はいくつかあると思いますが、Windows USBViewでCurrent Config Valueを見ていただくというのが一つの方法です。

お手数おかけして申し訳ございませんが、これに関する質問は別のスレッドを作成しそちらで議論していただくようお願い申し上げます。

よろしくお願い致します。

Hirotaka Takayama

0 件の賞賛