- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, Kenshow-san
Confirm to work this KBA.
Thanks
Jenna
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Jenna-san,
Japanese translation was over.
Please check below.
Original KBA:
PSoC 4 I2C Master Always Reports BUS_BUSY - KBA231435
Thanks.
==============================
タイトル: PSoC 4 I2Cマスターは常にBUS_BUSYを報告します - KBA231435
バージョン:**
I2Cマスター構成のSCBブロックは、I2C開始条件でビジーフラグを設定し、I2C停止条件でそれをクリアします。
SDAラインを論理LOW(0.1VDD)にする可能性のあるI2Cバスのノイズは、誤ったスタート条件でトリガーしてしまいます。次に、ハードウェアはバスが永久にビジーであり、この状態から回復しないと想定します。このエラーは、マスターから完全なバイトが受信される前に、アクティブな転送中にスレーブがSCLラインをLOWにプルした場合にも発生する可能性があります。
この無期限のSCB_I2C_MSTR_BUS_BUSYステータスから回復するには、ステータスがいくつかのサイクルの間継続的にビジーであるときに、SCB_STOP()およびSCB_Start()関数を呼び出してI2Cブロックをリセットする必要があります。
次のコードスニペットは、マスターがスレーブに書き込みを試み、通常はI2CM_I2C_MSTR_NO_ERRORを返すこの機能を示しています。ただし、NO_OF_ATTEMPTS 回連続してエラーが発生すると、I2Cブロックがリセットされます。
/* I2C書き込みを開始し、ステータスをチェックします */
if (I2CM_I2C_MSTR_NO_ERROR == I2CM_I2CMasterWriteBuf(I2C_SLAVE_ADDR,
buffer, PACKET_SIZE ,
I2CM_I2C_MODE_COMPLETE_XFER ))
{
busy_cnt = 0;
/* I2C書き込み成功 */
}
/* I2Cデータの送信中にエラーが発生しました*/
else
{
/* ビジーカウンターフラグを更新します */
busy_cnt ++;
/* I2C書き込みで継続的なエラーが発生したかどうかを確認します*/
if (busy_cnt> NO_OF_ATTEMPTS )
{
busy_cnt = 0;
/* SCBブロックをリセットします */
I2CM_Stop();
I2CM_Start();
}
}
関連ドキュメント:
SCBコンポーネントデータシート:https : //www.cypress.com/documentation/component-datasheets/psoc-4-serial-communication-block-scb
I2Cバス仕様:https : //www.nxp.com/docs/en/user-guide/UM10204.pdf
==============================
24-Sept-2020