2367284_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2367284_ja-JP

2367284_ja-JP

mc33771cではTPL通信は動作しません

MC33771B の BCC ドライバライブラリを使用して、カスタムボードで完全に動作します。しかし、IC を MC33771C に交換し、C バリアント用の公式 NXP BCC ドライバに切り替えると、 組み込みソフトウェアMC33771C パッケージ) 通信が失敗すると、 BCC_AssignCid CRCエラーが原因です。TPL通信が機能していないのは、常にエコーフレームしか受信できず、データを受信できないためです。同じハードウェアはmc33771bでは動作しますが、ICに合わせてbccライブラリを変更するだけです。

Re: TPL communication is not works in mc33771c

Miral_0-1779253113801.pngMiral_1-1779253139984.pngMiral_2-1779253161191.png

これは当社独自の基板回路図で、こちらはTPL通信用のコードです。

特定の実装とBCCライブラリを使用することで、MC33771Bとの通信は正常に動作します。コマンドの送信と有効な応答フレームの受信は正常に行えました。

しかし、同じ通信コードを使用し、MC33771C用のBCCライブラリ/設定のみを置き換えた場合、エコーフレームのみを受信し、デバイスからの有効な応答は得られません。

SPI/TPLのタイミング、フレームフォーマット、およびハードウェア接続は変更ありません。ウェイクアップシーケンスとINITシーケンスも実装されています。

MC33771Cでこの問題が発生した方はいますか?

bcc_status_t BCC_MCU_TransferTpl ( uint8_t drvInstance ,

uint8_t transBuf []

uint8_t recvBuf []

uint16_t recvTrCnt )

{

// 受信データの合計サイズ = 6バイト × 転送回数

uint16_t recvSize ;

if ( recvTrCnt > 0 )

recvSize = ( recvTrCnt -1 ) * 6 U ;

そうでない場合、

recvSize = 6 U ;


HAL_SPI_DeInit ( & hspi2 ) ;

HAL_Delay ( 2 ) ;

HAL_SPI_Init ( & hspi2 ) ;

memset ( recvBuf , 0 , sizeof ( & recvBuf )) ;

// SPI通信を開始する

HAL_GPIO_WritePin ( CS_TX_GPIO_Port , CS_TX_Pin , GPIO_PIN_RESET ) ;

HAL_SPI_Receive_IT ( & hspi2 , recvBuf , 6 ) ;

rxflag = 0 ;

// --- 48ビットフレームを1つ送信する ---

if ( HAL_SPI_Transmit_IT ( & hspi1 , transBuf , 6 ) != HAL_OK )

{

HAL_GPIO_WritePin ( CS_TX_GPIO_Port , CS_TX_Pin , GPIO_PIN_SET ) ;

return BCC_STATUS_PARAM_RANGE ;

}

BCC_MCU_WaitUs ( 5 ) ;

if ( spi2_rx_done == 1 )

{

HAL_SPI_Receive_IT ( & hspi2 , recvBuf , recvSize ) ;

spi2_rx_done = 0 ;

}

HAL_GPIO_WritePin ( CS_TX_GPIO_Port , CS_TX_Pin , GPIO_PIN_SET ) ;

return BCC_STATUS_SUCCESS ;

}

int MC33771_Init ( void )

{

// まずMC33664 TPLトランシーバを有効にします

HAL_GPIO_WritePin ( EN_GPIO_Port , EN_Pin , GPIO_PIN_RESET ) ;

HAL_Delay ( 1 ) ;

HAL_GPIO_WritePin ( EN_GPIO_Port , EN_Pin , GPIO_PIN_SET ) ;

HAL_Delay ( 10 ) ; // MC33664の準備が整うまで待機


// BCCドライバの設定

g_bccConfig.drvInstance = 0 ;

g_bccConfig.commMode = BCC_MODE_TPL ;

g_bccConfig.devicesCnt = 1 ;

g_bccConfig.device [ 0 ]= BCC_DEVICE_MC33771C ;

g_bccConfig.cellCnt [ 0 ]= 14 ;



// BCCライブラリを初期化する

status = BCC_Init ( & g_bccConfig ) ;


if ( status != BCC_STATUS_SUCCESS ) {

return ( int ) status ;

}


}


int MC33771_ReadAllCellVoltages ( float cellVoltages [ 14 ])

{


uint16_t測定値[ BCC_MEAS_CNT ] ;


uint32_t voltage_uv ;

uint8_tセル;




if ( cellVoltages == NULL ) {

-1を返す;

}


status = BCC_Meas_StartConversion ( & g_bccConfig , BCC_CID_DEV1 , BCC_AVG_1 ) ;

if ( status != BCC_STATUS_SUCCESS ) {

ステータスを返します

}


HAL_Delay ( 600 ) ;

// 測定値を読み取る

status = BCC_Meas_GetRawValues ( & g_bccConfig , BCC_CID_DEV1 , measurements ) ;

if ( status != BCC_STATUS_SUCCESS ) {

ステータスを返します

}


// すべてのセル電圧を抽出します

for ( cell = 0 ; cell < 14 ; cell ++ ) {

voltage_uv = BCC_GET_VOLT ( measurements [ BCC_MSR_STACK_VOLT + cell ]) ;

cellVoltages [ 13 - cell ] = ( float ) voltage_uv / 1000.0 f ;

cellVoltages [ 13 - cell ] = ( float ) cellVoltages [ 13 - cell ] / 1000.0 f ;

}


0を返す;

}

int main ( void )

{



/* すべてのペリフェラルをリセットし、フラッシュインターフェースとSystickを初期化します。*/

HAL_Init () ;


/* システムクロックを設定します */

SystemClock_Config () ;


/* ペリフェラルの共通クロックを設定します */

PeriphCommonClock_Config () ;


/* 設定済みのペリフェラルをすべて初期化します */

MX_GPIO_Init () ;

MX_DMA_Init () ;

MX_SPI1_Init () ;

MX_SPI2_Init () ;

MX_TIM16_Init () ;

MX_USART1_UART_Init () ;


MC33771_Init () ;

{


temp = MC33771_ReadAllCellVoltages ( voltage ) ;

HAL_Delay ( 1000 ) ;


}


}

void HAL_SPI_RxCpltCallback ( SPI_HandleTypeDef * hspi )

{

if ( hspi- > Instance == SPI2 )

spi2_rx_done = 1 ;


}

static void MX_SPI1_Init ( void )

{


/* USER CODE BEGIN SPI1_ Init 0 */


/* USER CODE END SPI1_ Init 0 */


/* USER CODE BEGIN SPI1_ Init 1 */


/* USER CODE END SPI1_ Init 1 */

/* SPI1 パラメータ設定 */

hspi1.Instance = SPI1 ;

hspi1.Init.Mode = SPI_MODE_MASTER ;

hspi1.Init.Direction = SPI_DIRECTION_2LINES ;

hspi1.Init.DataSize = SPI_DATASIZE_8BIT ;

hspi1.Init.CLKPolarity = SPI_POLARITY_LOW ;

hspi1.Init.CLKPhase = SPI_PHASE_2EDGE ;

hspi1.Init.NSS = SPI_NSS_SOFT ;

hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8 ;

hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB ;

hspi1.Init.TIMode = SPI_TIMODE_DISABLE ;

hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE ;

hspi1.Init.CRCPolynomial = 7 ;

hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE ;

hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE ;

if ( HAL_SPI_Init ( & hspi1 ) != HAL_OK )

{

エラーハンドラー() ;

}

/* USER CODE BEGIN SPI1_ Init 2 */


/* USER CODE END SPI1_ Init 2 */


}


/**

* @brief SPI2 初期化関数

* @Paramなし

* @ retvalなし

*/

static void MX_SPI2_Init ( void )

{


/* USER CODE BEGIN SPI2_ Init 0 */


/* USER CODE END SPI2_ Init 0 */


/* USER CODE BEGIN SPI2_ Init 1 */


/* USER CODE END SPI2_ Init 1 */

/* SPI2 パラメータ設定 */

hspi2.Instance = SPI2 ;

hspi2.Init.Mode = SPI_MODE_SLAVE ;

hspi2.Init.Direction = SPI_DIRECTION_2LINES_RXONLY ;

hspi2.Init.DataSize = SPI_DATASIZE_8BIT ;

hspi2.Init.CLKPolarity = SPI_POLARITY_LOW ;

hspi2.Init.CLKPhase = SPI_PHASE_2EDGE ;

hspi2.Init.NSS = SPI_NSS_HARD_INPUT ;

hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB ;

hspi2.Init.TIMode = SPI_TIMODE_DISABLE ;

hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE ;

hspi2.Init.CRCPolynomial = 7 ;

hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE ;

hspi2.Init.NSSPMode = SPI_NSS_PULSE_DISABLE ;

if ( HAL_SPI_Init ( & hspi2 ) != HAL_OK )

{

エラーハンドラー() ;

}

/* USER CODE BEGIN SPI2_ Init 2 */


/* USER CODE END SPI2_ Init 2 */


}


Re: TPL communication is not works in mc33771c

ミラル様、

MC33771Cに推奨されているソフトウェアを使用している場合、ハードウェアの問題である可能性が高いです。AN12633を参照してください。MC33771BからMC33771Cに切り替える場合は、いくつかの外部部品を変更する必要があります。

JozefKozon_0-1779177671061.png

例えば、ローパスフィルタのCLPFとCINは異なります。MC33664と最初のMC33771Bおよび/またはMC33771Cノード間の外部コンポーネントについては、それぞれMC33771BのフルデータシートおよびMC33771Cのフルデータシートのセクション13.2.6を参照してください。MC33771Cの完全なデータシートは一般公開されていますが、 MC33771Bの完全なデータシートは機密情報であり、有効なNDA(秘密保持契約)を締結すれば、セキュアセクションからダウンロードできます。

JozefKozon_2-1779178421486.png


JozefKozon_1-1779178371806.png


敬具、

ヨゼフ

タグ(1)
評価なし
バージョン履歴
最終更新日:
1週間前
更新者: