6

CANBUSプロトコルを学び、実装したい。ソフトウェアでMSP430Launchpadを使用して、UART、SPI、I2C、およびOneWireBusプロトコルを実装しました。ここで、CANバスプロトコルについて学びたいと思います。私はmBedLPC1768CortexM3開発ボードを持っています。mBedにはCanBusLibraryがありますが、他の通信プロトコルの場合と同じように、詳細に学習できるように独自のライブラリを作成したいと思います。

そもそも適切な資料が見つからず、ネット上に散らばっているようです。利用可能な開発ボードを使用してCANバスプロトコルを作成および実装する方法を誰かがガイドできますか?

ありがとう

4

4 に答える 4

7

CANライブラリの開発は、I2CやSPIと比較して比較的簡単です。これは、CortexのCANコントローラーが複雑なことのほとんどを処理するためです。

データを送信するには、指定されたレジスタにIDとデータを書き込み、データを送信するためのビットを設定する必要があります。

NXPのこのアプリケーションノートは、非常に役立ちます。

次の関数を実装することをお勧めします。

  1. InitCAN-CANの指定されたボーレートを設定する必要があります。
  2. SetFilters-ほとんどのCANコントローラーにはアクセプタンスフィルターが付属しているので、それを持っているのは良いことです
  3. SendData-ID_TypeやRTRなどのパラメーターを受け入れるようにしてください。
  4. RecieveData-これはブロッキングまたは割り込みベースの場合があります。

始める前に、CANの基本を読んで理解してください。Microchip社のアプリケーションノートAN713およびAN754は優れた情報源です。また、ベクターのサイトとウィキペディアの記事。

さらに、疑問はいつでもここまたはElectronics.StackExchange.comに投稿できます:)

于 2013-03-14T11:57:41.930 に答える
1

さて、この投稿はかなり古いですが、人々はそれをもう一度見るかもしれません:まず第一に、CanバスはUSARTやIC2のようなユーザーフレンドリーなプロトコルではないので、あなたはあなたの缶ビットのタイミングについて非常に正確でなければなりませんが、そのためのツールがありますが手作業で計算することをお勧めします。マイクロコントローラーの場合、私はSTM32を提案し、私の意見ではPICシリーズから離れます。SAE J1939などの高レベルプロトコルを使用しないCAN-BUSのみの場合、手順は非常に単純で簡単です。

1)缶を初期化する

2)CANを構成モードにします。ボーレート、マスク、フィルターは構成モードでのみ設定できることを忘れないでください。

3)ボーレートレジスタを設定します。

4)マスクとフィルターを設定します。すべてのメッセージを受信する必要がある場合は、マスクを0x00に設定するだけです。その後、フィルターは気になりません。

5)CANを通常モードまたはループバックモードに設定します。(ループバックモードは、主にデバッグ目的で使用されます。)

人々が最初に缶を実装しようとするいくつかの注目すべき点は見逃すかもしれません:***送信を成功させるには、少なくとも2つの動作するCANノードが必要です。(もちろん、ボーレートが一致しています)。したがって、1つのノードでCANを介してデータを送信する場合、データは成功しません。送信機ノードはACKを受信しないためです。

***おそらくCANトランシバーが必要になります。トランセバーのTxピンとRxピンの間に100オームまたは同様の値の抵抗を配置することを忘れないでください。

于 2019-01-24T12:42:01.227 に答える
0

hcs12ドラゴンボードを使用してcanプロトコルを実装する方法を学んだとき、ソフトウェアcankingを使用してmcp25050と通信しました。あなたがバスに乗るときにキャンキングがあなたのためにすべてを初期化し、あなたがしなければならないのは書く方法と受け取る方法を学ぶことだけなので、それは大いに役立ちました。手順を初期化する方法を学びたい場合は、次のとおりです。

  1. CAN制御レジスタ1のビットを設定することでCANバスを有効にします

  2. 缶の初期化を有効にする制御レジスタ0

  3. 制御レジスタ1ビットをチェックしてCANバスが初期化モードになるまで待ちます

  4. CAN制御レジスタ1のビットを再度設定し、クロックソースを設定することでCANバスを有効にします-バスクロックまたはeclock

  5. バスタイミングレジスタでプリスケーラボーレートとTqを設定

  6. サンプル時間とprop_seg1、prop_seg2、およびphase_segを設定します

  7. 識別子受け入れレジスタ0-3または0-7に受け入れIDを設定します-すべてを受信するように缶を設定するには、それらを00に設定します。これは、比較を行うときに、CANバスが1の補数を入力するIDと比較するためです。

  8. 識別子マスクレジスタを0〜3または0〜7に設定します。どのビットも気にしない場合は、すべてをFFに設定します。

  9. 識別子受け入れ制御レジスタを32ビット拡張または11ビットに設定します-私は32を使用します

  10. 制御レジスタ0を通常モードに戻します

  11. 制御レジスタ1をチェックして、バスが通常モードになるまで待ちます。

この後、レジスタの変更またはデータの読み取りを開始して、これを行うことができます。空の缶バッファを選択し、IDを書き込んでデータを書き込んだり要求したりしてから、書き込みの場合は3つのトランスミッタレジスタにアドレス、マスク、および値を入力してから、 dlc(書き込みの場合は3、読み取りの場合は8-1)。IDとデータを送信するには、can送信バッファの選択と等しくなるようにcan送信フラグを設定する必要があります。**使用するIDによっては、ビットシフトが面倒になる可能性があるため、問題が発生した場合は、デバッグして、送信バッファ選択レジスタが保持しているものを確認することをお勧めします。mcp25050にメッセージを送信しているときに正しくシフトしなかったため、このエラーが発生しました

于 2017-12-11T15:09:01.717 に答える
0

MCUがCANバスをサポートしている場合は、関連するデータシートから始める必要があります。

于 2019-02-15T11:53:12.570 に答える