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

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

IFX Low-Level Library (iLLD) バージョン iLLD_1_0_1_17_0 を使用してAURIX™ TC387 マイクロコントローラ 作業しています。EVAL_BDPS_DRIVERI2C ピンを IfxI2c0_SCL_P15_4_INOUT にコンフィギュレーションできず、スレーブ モードでIfxI2c0_SDA_P15_5_INOUTできません。 設定ファイルでperipheralModeをslaveに設定しました。

i2cConfig.peripheralMode = IfxI2c_MasterNotSlave_slave;
if (config->peripheralMode == IfxI2c_MasterNotSlave_slave)
{
   IfxI2c_configureAsSlave(i2cSFR);
} 

しかし、このconfigureAsSlave関数はIfxI2c.cで定義されています。 ファイルは、実際にはマスターモードに戻しています。

void IfxI2c_configureAsSlave(Ifx_I2C *i2c)
{
   i2c->ADDRCFG.B.MNS = 1; // master mode
}

ここではビットを0に変更して、スレーブモードに設定しました。 うまくいきませんでした。 アドレス一致のプロトコル割り込みソースを有効にしましたが、この割り込みが I2C で受信されません。

IfxI2c_enableProtocolInterruptSource(i2cSFR, IfxI2c_ProtocolInterruptSource_addressMatch);

私のコードはここに座ってアドレスの一致を待っています..

// Wait until i2c master sends a read request
while (IfxI2c_getProtocolInterruptSourceStatus(i2c, IfxI2c_ProtocolInterruptSource_addressMatch) == FALSE)
{}
IfxI2c_clearProtocolInterruptSource(i2c, IfxI2c_ProtocolInterruptSource_addressMatch);

プロトコル割り込みをI2Cスレーブモードで動作させる方法に関する洞察は非常に役立ちます。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Aurix-tc387-I2C-Slave-mode-not-working/td-p/680963

0 件の賞賛
1 解決策
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは @anwar

これは、このバージョンのiLLD(1_0_1_17_0)のエラーですので、ご報告します。

iLLD I2c EVAL_BDPS_DRIVER は、マスターモードでの8ビット幅のデータ転送のデフォルト設定を提供します。 スレーブ構成は非常によく似ており、次のように設定できます。

 

void IfxI2c_configureAsSlave(Ifx_I2C *i2c)
{
    // enter config Mode
    IfxI2c_stop(i2c);

    i2c->ADDRCFG.U      = 0;
    i2c->ADDRCFG.B.MNS  = 0; // slave mode
    i2c->ADDRCFG.B.SONA = 0; // don't release the bus on NACK
    i2c->ADDRCFG.B.SOPE = 0; // after transfer go into master restart state
    i2c->ADDRCFG.B.TBAM = 0; // 7 bit address mode
    i2c->FIFOCFG.U      = 0;
    i2c->FIFOCFG.B.TXFC = 1; // FIFO as flow controller
    i2c->FIFOCFG.B.RXFC = 1; // FIFO as flow controller
    i2c->FIFOCFG.B.TXBS = 0; // Burst size 1 word
    i2c->FIFOCFG.B.RXBS = 0; // Burst size 1 word
    i2c->FIFOCFG.B.TXFA = 0; // fifo is byte aligned
    i2c->FIFOCFG.B.RXFA = 0; // fifo is byte aligned
}

 

割り込みについては、これらの関数で割り込みとフラグを有効にする必要があります。

 

// enable the protocol interrupt flag
IfxI2c_enableProtocolInterruptFlag(Ifx_I2C *i2c);

// enable the protocol interrupt
IfxI2c_enableProtocolInterrupt(i2c, IfxSrc_Tos_cpu0, 8);

 

この EVAL_BDPS_DRIVER の詳細については、iLLD のドキュメントを参照してください。 ドキュメントを入手するには 、この 6EDL_SPI_LINK から入手するか 、このナレッジ TLE9243QK_BASE_BOARD 記事に従ってください。 そこで、モジュール->iLLD->I2C->I2c EVAL_BDPS_DRIVERの使用方法に移動できます。

よろしくお願いいたします

エリック

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Aurix-tc387-I2C-Slave-mode-not-working/m-p/683833

元の投稿で解決策を見る

0 件の賞賛
1 返信
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは @anwar

これは、このバージョンのiLLD(1_0_1_17_0)のエラーですので、ご報告します。

iLLD I2c EVAL_BDPS_DRIVER は、マスターモードでの8ビット幅のデータ転送のデフォルト設定を提供します。 スレーブ構成は非常によく似ており、次のように設定できます。

 

void IfxI2c_configureAsSlave(Ifx_I2C *i2c)
{
    // enter config Mode
    IfxI2c_stop(i2c);

    i2c->ADDRCFG.U      = 0;
    i2c->ADDRCFG.B.MNS  = 0; // slave mode
    i2c->ADDRCFG.B.SONA = 0; // don't release the bus on NACK
    i2c->ADDRCFG.B.SOPE = 0; // after transfer go into master restart state
    i2c->ADDRCFG.B.TBAM = 0; // 7 bit address mode
    i2c->FIFOCFG.U      = 0;
    i2c->FIFOCFG.B.TXFC = 1; // FIFO as flow controller
    i2c->FIFOCFG.B.RXFC = 1; // FIFO as flow controller
    i2c->FIFOCFG.B.TXBS = 0; // Burst size 1 word
    i2c->FIFOCFG.B.RXBS = 0; // Burst size 1 word
    i2c->FIFOCFG.B.TXFA = 0; // fifo is byte aligned
    i2c->FIFOCFG.B.RXFA = 0; // fifo is byte aligned
}

 

割り込みについては、これらの関数で割り込みとフラグを有効にする必要があります。

 

// enable the protocol interrupt flag
IfxI2c_enableProtocolInterruptFlag(Ifx_I2C *i2c);

// enable the protocol interrupt
IfxI2c_enableProtocolInterrupt(i2c, IfxSrc_Tos_cpu0, 8);

 

この EVAL_BDPS_DRIVER の詳細については、iLLD のドキュメントを参照してください。 ドキュメントを入手するには 、この 6EDL_SPI_LINK から入手するか 、このナレッジ TLE9243QK_BASE_BOARD 記事に従ってください。 そこで、モジュール->iLLD->I2C->I2c EVAL_BDPS_DRIVERの使用方法に移動できます。

よろしくお願いいたします

エリック

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Aurix-tc387-I2C-Slave-mode-not-working/m-p/683833

0 件の賞賛