SSPベヌスの1-Wire実装

石から蒞気を䜜る方法、私たちの医者ガスパヌは知っおいたす


MKを遞択する堎合、特定のタスク甚の特定の呚蟺デバむスのセットの構成に存圚するこずに泚意を払うこずが非垞に頻繁に必芁です。 䞀方、すでに䜿甚されおいるMKで䜿甚可胜な他のむンタヌフェむスに基づいお、倚くの暙準バスを実装できたす。 この投皿では、1986VIE1T MKには存圚しない既存のSSPむンタヌフェむスに基づいたハヌドりェア1-Wireむンタヌフェむスの䜿甚方法を瀺したす。この経隓は、同じアヌキテクチャの他のメヌカヌの他のMKに転送できたす。



たず、䜿甚するマむクロコントロヌラヌの簡単な説明。 Milander補のMK 1986BE1Tは非垞に優れたデバむスであり、その利点は囜産品であるずいう事実に限定されたせんただし、このパラメヌタヌは著者にずっお決定的でした。 実際、最倧140 MHzのクロック呚波数を備えたCortex-M1コアを備えたMCはたれな垂堎参加者であり、倚数のさたざたなむンタヌフェむスの存圚、拡匵された枩床範囲、およびVPを備えたバヌゞョンの可甚性を考えるず、このMKはほがナニヌクなオファヌになりたす。 同時に、このMKの広範な䜿甚に察する魅力を䜎䞋させるいく぀かの特性に泚意する必芁がありたす。぀たり、䞻に金属セラミックケヌスによっお決定される高䟡栌開発者はプラスチックケヌスで比范的安䟡なバヌゞョンを発衚したしたが、セラミック金属ケヌスは䜿甚するのが非垞に䞍䟿ですただし、このタむプの䜏宅は、「正盎な」軍事枩床範囲を可胜にし、著者の意芋では䞍十分なレベルの文曞䜜成すべおの囜内問題の問題を可胜にしたす それにもかかわらず、正圓化しないOtok、。



このMKの䞻な特城を説明したす。

CORTEX-M1コアわずかな制限付き;



クロック呚波数-最倧144 MHz25 MHzを超える呚波数の堎合、プログラムメモリの読み取り時に遅延が発生し、実際の速床が100 MHzず同等に䜎䞋したす。



プログラムメモリ-128 Kb、デヌタメモリ-48 Kb;



䞡方のタむプのメモリは、倖郚システムバスの組み蟌み32ビットコントロヌラヌを介しお簡単に拡匵可胜ですかなりの数の倖郚ピンが必芁です。



2぀の内郚発振噚あたり正確ではない、倖郚氎晶振動子ず内蔵PLLを接続する機胜を備えたクロックシステムを開発したした。



䞍揮発性メモリ12 * 4バむトおよびリアルタむムクロック倖郚バッテリヌ電源付き;



8 * 12ビットADC、2 * 12ビットDAC、PWMモヌドの8぀のタむマヌ。



32xチャネルRAP;

適切な呚蟺機噚の豊富なセット-2 * CAN、GOST 18977、2 * GOST R-52070、Ethernet 10/100ビルトむンPHY、USBホスト/デバむス、2 * UARTビルトむンIRDA、3 * SSP。



最倧96のナヌザヌ蚭定可胜なレッグ。



䞀般的なプログラミング環境䜜成者はIARを奜むからSWDおよびJTAGを介しおプログラミングおよびデバッグする機胜。

䞀般に、氎晶はかなりたずもです。詳现に぀いおは、補造元のWebサむトを参照しおください。 機噚の欠点の䞭で、著者は倖郚むベント甚の未開発の割り蟌み装眮に泚意したす倖郚割り蟌みは事前定矩された少数の結論にしか到達できたせん。これは開発者の胜力を制限したす。



この蚘事のもう1぀の「ヒヌロヌ」は、1-Wireむンタヌフェヌスです。 むンタヌフェむスは暙準化されおおらず、ダラスセミコンダクタヌの所有物であり、広く知られおいたす。䜎速デバむスずのやり取りに䜿甚されたす.i-Button識別キヌずさたざたな枩床センサヌは特に知られおおり、バストポロゞは個別のアドレス指定を備えたスタヌであり、亀換レヌトは最倧15 Kbpsです。ワむダの数-2、より詳现な仕様は䌚瀟のりェブサむトで入手できたす。 倚くのマむクロコントロヌラにはこのむンタヌフェむスのハヌドりェア実装がありたすが、問題のMKはそれらに適甚されたせん。 したがっお、暙準の呚蟺機噚MK 986BEを䜿甚しおむンタヌフェむスを実装する可胜性を怜蚎したす。



たず、OSIモデルのレむダヌ1物理むンタヌフェヌスの実装が必芁です。 この芳点から、むンタヌフェヌスは完党に単玔です-アヌス線ず1本の線が必芁です。これにより、デバむスの双方向の盞互䜜甚が実行され、オプションで端末装眮に電力が転送されたす。 デヌタワむダを実装するには、オヌプンコレクタを備えたMK出力ず、公称倀5コムのプルアップ抵抗が必芁です。 䜿甚されるMKのすべおの出力は構成可胜であり、ビルトむンプルアップおよびダりン抵抗を装備できたす詳现に぀いおは、MKの説明を参照しおください。 内蔵抵抗噚の倀は必芁なものずは異なりたす噂によれば、それらは玄10コムです-文曞によるず文曞化されおいないので、噂によるず、しかし、情報源が1぀の堎合、内蔵抵抗噚を䜿甚し、必芁に応じお、倖郚抵抗噚を远加するこずができたす適切な栄逊。 MK端子の蚱容可胜な構成には、むンタヌフェむス芁件を満たすオヌプンドレむン出力モヌドもありたす。 したがっお、むンタヌフェむスの物理的な実装の根本的な䞍可胜性は芋぀かりたせんでした。



マスタヌずスレヌブの盞互䜜甚では、アクティブなれロレベルが䜿甚され、さたざたな持続時間のパルスの圢で䟛絊されたす。 3぀の䞻芁なパルス幅が䜿甚されたす。



少なくずも480マむクロ秒の持続時間を持぀リセットパルス、1から15マむクロ秒の持続時間の単䜍の送信パルス読み取りを同期するために同じパルスが䜿甚される、15から60マむクロ秒の持続時間のれロ送信パルス。 パルス間の保護間隔は少なくずも1ÎŒsである必芁があり、保護間隔のあるパルス持続時間は60〜120ÎŒsである必芁がありたす。 ここで、干枉を無芖するずいう芳点から最小期間の芁件が明確な堎合、䞊からのビット間隔の制限はそれほど明癜ではなく、デバむスのロゞックによっお決定されないこずに泚意しおください。 それにもかかわらず、制限は明確に述べられおおり、それに応じお尊重されなければなりたせん。 スレヌブがマスタヌず察話するずき、2皮類のパルスが䜿甚されたす。぀たり、15から60ÎŒsの期間ず60から240ÎŒsの期間の埌者の終了に関連する遅延を䌎うリセットパルスに応答するれロの圢の存圚パルス、および応答で発行されるれロ送信パルス最埌の開始から1マむクロ秒以䞋の遅延で、15から60マむクロ秒の期間の読み取りパルスむンタヌフェむスのドキュメントでは、正確に15マむクロ秒の芁件が確立され、その埌に0から45マむクロ秒のパルスを削陀するための遅延がありたす-奇劙な ATO 1回を曞きたした。 䞊蚘からの䞀般的な結論は、1-Wireむンタヌフェヌスの実装のために、䞊䞋からの制限で玄10ÎŒsの粟床で時間間隔を維持する必芁があるずいうこずです。



このプロトコルの明癜な実装は、出力ポヌトの盎接制埡に基づいおおり、オヌプン゜ヌスモヌドで構成され、プルアップ抵抗によっお接続されおいたす。 たずえば、プレれンスパルスの存圚を䌎うリセットパルスの実装は、次の擬䌌コヌドで衚すこずができたす。

     ( 0),   500 ,    ( 1),   15  :   0 –  -   (),   45 :   0 –   ::  -   (  ), ::   60 :   1-  -   ( ),   180 :   1-   ::  -   ( ), ::  -  .
      
      





実際、この手順でさえ、むンパルスノむズの圱響を排陀するのはより難しいはずですが、この蚘事の目的のために、いく぀かの単玔化が蚱容されたす。



残りのパルスに぀いおも同様の手順を実行できたす。 次に、このオプションの短所を怜蚎したす。



遅延の゜フトりェア実装の欠点は、取埗された時間間隔がMKクロック呚波数ず個々のコマンドの実行時間に䟝存するこずであり、プログラムメモリの読み取りに遅延が導入されるず、埌者はほずんど無期限になりたす

そしお、埮調敎で最初の欠点を克服したずしおも、RTOSのフレヌムワヌク内で他のモゞュヌルず䞀緒に機胜する条件䞋で、たたは䞭断が存圚する堎合そしお、ほずんど垞にそうであるように、真空で球圢プログラムを曞いおいない、埗られる時間間隔ははるかに長くなる可胜性がありたすしかし予想以䞊に短くなりたせん。



むンタヌフェヌスは非垞に時間䟝存であり、必芁な粟床は重芁です-高速MKでも10マむクロ秒はそれほど倚くないため、1-Wireバス䞊のデバむスず通信しようずするず混chaずした障害を受け取る可胜性が高くなりたす。 高レベルのプロトコルはコヌディングの冗長性によるこのような障害を怜出できたすが、同様の実装方法を掚奚するこずはできたせん。 このような゚ラヌに察凊するには、クリティカルセクションおよび䞊蚘のアルゎリズムではすべおの操䜜内で、割り蟌みを犁止し、タスクを十分に長い時間切り替えられる機胜をブロックする必芁がありたす。これは良いプログラミングスタむルではありたせん。



この実装のバリ゚ヌションは、汎甚タむマヌの1぀たたはシステムタむマヌを䜿甚しお必芁な時間間隔を圢成するこずです。 オヌバヌヘッドコストの遅延を考慮するず、タむミングチャヌトを非垞に正確に維持し、䞊蚘の実装の最初の欠点を取り陀くこずができたす。 それにもかかわらず、すべおのRTOSたたは䞭断の存圚䞋で、指定された時間たでに順序付けられたむベントが発生しないこずのみを保蚌するこずはできたすが、䞊蚘の制限は䞍可胜であるため、2番目の欠点は、決定の枠組み内で根本的に取り返しの぀かないものです。



したがっお、1-Wireむンタフェヌスの実装には、䞊䞋から厳密に制限された時間間隔を発行する機胜ず、正確に指定された時間間隔でMK端末の状態を監芖する機胜が必芁です。 MKには、開発されたタむマヌハヌドりェアステヌトマシンを含むでそのような機䌚がありたすが、怜蚎䞭のMKはそれらの1぀ではありたせん。 たた、ハヌドりェアで実装されたシリアルむンタヌフェむスを䜿甚するこずもできたす。 MKには倚数のシリアルむンタヌフェむスが実装されおいたすが、すべおのシリアルむンタヌフェむスを目的に䜿甚できるわけではありたせん。 たずえば、USBむンタヌフェヌスは固定呚波数で動䜜し、そのハヌドりェアはプロトコルに厳密に接続されおいるため、CANおよびGOSTにも適甚される目的のために実質的に倉曎するこずはほずんど䞍可胜です。 UARTを䜿甚するず、状況は非垞に良くなり、その速床は広い範囲内で倉曎できたす。たた、パルスはアクティブレベルから開始されるため、開始ビットの存圚は障害になりたせん。 唯䞀の重芁な制限はアクティブレベルの䞍䞀臎です。これは、䞀臎する芁玠を導入するこずで解消できたす。 しかし、2぀のUARTがすべお他のタスクに䜿甚されおいたため、このような゜リュヌションは解決されたせんでした。



その結果、同期シリアル通信SSPの3぀のナニバヌサルモゞュヌルの1぀に基づいお1-Wireむンタフェヌスを実装するこずが決定されたした。 これらのモゞュヌルの機胜の詳现な説明は、メヌカヌMKのドキュメントに蚘茉されおいたす。 ぀たり、これらのモゞュヌルを䜿甚するず、MK内で生成されたモゞュヌルのクロック呚波数ず同期し、シリアルコヌドで出力ポヌトに情報を発行し、同時に䞊蚘の呚波数を参照しおMKの入力ポヌトで情報を受信できたす。 同時に、双方向の亀換を敎理するために、䞀緒に接続されたモゞュヌルデヌタの出力ず入力を䜿甚したすが、クロックラむンず同期ラむン䞊の信号は䜿甚せず、汎甚ラむンずしお䜿甚できたす。これは、柔軟なMKピンコンフィギュレヌションシステムで蚱可されたす。 送信されたバむトを䜿甚しお、1ビットの送信/受信に関連する時間間隔を゚ンコヌドするこずが想定されおいたすが、バむトビットの倀は、アクティブレベルビット0ずその䞍圚ビット1の期間を決定したす。 SSP蚭定を決定するずき、最小送信間隔は1〜15ÎŒsであり、最倧カりント間隔は情報ビットで60〜120ÎŒs、リセット信号で少なくずも480であるこずを考慮する必芁がありたす。 最小間隔ずしお10マむクロ秒を遞択するず、最初の条件が満たされ、ビット間隔の期間は6〜12の最小間隔になり、図8はこの範囲にうたく適合したす。 リセット信号の持続時間は少なくずも48サむクルになり、バむトのビット数を超えたす。 最埌の問題を解決するには、最小間隔の期間を倉曎するか、1バむト以䞊の情報を䜿甚しおパルスを送信する必芁がありたす。 埌者の方法は、個々の送信バむトの送信間隔の䞍確実性に関する問題を匕き起こす可胜性があり、したがっお、結果ずしお生じるパルスの持続時間が予枬できないほど長くなる可胜性がありたす。 幞いなこずに、SSPモゞュヌルには8個の16ビットFIFOバッファヌが装備されおいるため、16 * 8 = 128ビットの最終バッファヌ長は、480 + 60 + 240 = 780/10 = 78ビットの可胜な最小シヌケンス長ず重耇したす。



したがっお、SSPを䜿甚するための次のアルゎリズムが構築されたす必芁なモヌドず必芁な送信呚波数を構成し、トランスミッタヌの動䜜を犁止し、必芁な時間間隔を提䟛するためにトランスミッタヌバッファヌを情報で満たし、トランスミッタヌを有効にしたす。 モゞュヌルは、出力デヌタラむンに沿っおシリアルコヌドで情報の送信を開始し、送信の最埌にレディフラグが立おられたす。これは、デヌタの次のバッチを圢成できるMK信号ずしお機胜したす。 この堎合、送信された信号のタむムダむアグラムは、モゞュヌルクロック呚波数に厳密に結び付けられたす。これは、MKクロック呚波数のみに䟝存し、その時点でどのプログラムが実行されようずも、決しお倉曎できたせん。 さらに、シヌケンスの個々のバむトの送信の間に、機噚によっお決定される間隔のみがあり、シヌケンスを圢成するずきに考慮するこずができたす研究は、そのような間隔を排陀できるこずを瀺しおいたす。 SSPモゞュヌルを構成するプロセスを怜蚎しおください。



SSPモゞュヌルは3぀のモヌドで動䜜できたす-



モトロヌラSPI

Texas Instruments SSI

National Semiconductor Microwireむンタヌフェヌス。



これらの3぀のモヌドのうち、埌者は適切ではありたせん。オシロスコヌプで怜査を開始する前に、最初の2぀のモヌドは信号フォヌマットに远加の芁件を課すからです。 ここで、SPIモヌドの特城は、隣接ワヌドの送信間の1ビットの遅延であり、これは䜿甚しない同期信号を送信するのに圹立ちたす。 これらの瞬間に0がデヌタラむンに珟れなかった堎合、ビット間の間隔がわずかに増加するため、これはそれほど重芁ではありたせん。これは1-Wireの芁件に埓っお完党に受け入れられたせん。





図1. SPIモヌドでの停パルス



SSIモヌドにこのような欠点がないこずは非垞に幞運であり、そうでなければプログラムを倧幅に耇雑にする必芁がありたす。 研究では、SSIモヌドでは、ワヌド間隔が単に存圚せず最埌のビットで同期パルスが送信される、したがっお、䌝送ラむンに「ギャップ」がないこずが瀺されおいたす。 䌝送線ず同期線の構成時に、信号レベルに文曞化されおいない倉曎がありたすが、SSPモゞュヌルをセットアップした埌のデバむスの操䜜は、これらの攟射の結果を抑制するリセットパルスで開始されるため、この実装には圱響したせん。





図2. SSIむネヌブル時の停パルス



問題は簡単な方法で解決されたため、実際のSSIモヌドを䜿甚するアプリケヌションの堎合は理解する必芁がありたすが、゚ミッションの原因を探すこずはありたせんでした。 䞊蚘の波圢では、0xBF81パタヌンに察応する次の基準信号が適甚されたした。





図3.停パルスのない信号。



すべおの図で、図1および3の䞊の信号黄色はデヌタラむン、䞋の信号青はクロック呚波数ラむン、図2では同期ラむンです。 むンタヌフェヌスの実装の䞋䜍の信号は䜿甚されず、時間間隔を決定するために参照順序で䞎えられたす。



したがっお、リセットパルスの送信ずプレれンスパルスの存圚は、次の擬䌌コヌドで衚すこずができたす。



   ;    0F800 00000 00000 001FF 0xFFFF 0xFFFF // (50  , 500  , 410     );   ;   " ";    ;    6  –  –  SSP;      0xF800 0x0000 0x0000 0b000X1XXXXX0XXXXX 0xXXXX 0xFFFF    –  –    -  .
      
      







いく぀かのポむントを説明したす-SSPぞの送信は受信ず同時に行われ、入力デヌタのゲヌティングの瞬間は半クロックサむクル5マむクロ秒のクロック呚波数でシフトしたす。したがっお、読み取り時には、送信されるワヌドずたったく同じ数のワヌドを取埗する必芁がありたす。最埌の1぀を陀いお、れロが受け入れられたす1でなければなりたせんが、特定の倀は、ラむンキャパシタンスずプルアップ抵抗の抵抗に䟝存したす。 次の機胜-「バッファが空」フラグは、情報の最埌のワヌドがシフトレゞスタに転送された盎埌に蚭定されたすが、ビットが転送される前に、「デバむスがフリヌ」フラグを䜿甚する必芁がありたす技術資料を参照、そうでない堎合、最埌のワヌドが衚瀺されたせん さらに、さたざたなパタヌンを䜿甚しおデバむスの誀動䜜に関するより詳现な情報を取埗できたすが、これは技術的な実装の埮劙な点です。



れロず1぀のパルスを送信するための同様の手順が簡単に䜜成され、1぀の16ビットSSPワヌドで2ビットの1-Wireを連続しお送信するこずは論理的です。 4 SSPワヌドで1-Wireバむトをすぐに転送する手順をお勧めしたす。 送信の最埌に、受信バッファを読み取っお送信デヌタのコピヌをそこから削陀するこずを忘れないでください。 読み取りの堎合、レコヌド1に察応するシヌケンスを圢成し、受信情報を分析しお受信ビットの倀を抜出する必芁がありたすパタヌン0b01111111を送信し、ケヌス1では0b01111111を、ケヌス0では0b00XXXX11を受け入れたす。 長いメッセヌゞの送信に぀いおは、開発されたダむレクトメモリアクセスデバむスを䜿甚しお゜フトりェアを敎理するオプションを怜蚎するこずができたすこれも十分に文曞化されおいたせん。そのチャネルの1぀がSSPモゞュヌルずの察話を担圓したす。



むンタヌフェヌスの提案された構成には欠点があるこずに泚意しおください-受信倀はクロック信号の前面に沿っお固定されたす。぀たり、受信情報を歪めるラむン䞊の短いパルスを「キャッチ」できたす。 この問題は、受信した情報をより詳现に分析するこずで解決できたす。たずえば、採甚されたパタヌン0b00100111では、巊から3番目の単䜍ビットが干枉ず芋なされたす。 もちろん、このような方法は最適ずは芋なされたせんが、そのようなむベントの可胜性は、玔粋な゜フトりェア実装の障害の可胜性よりも蚈り知れないほど䜎いこずを理解する必芁がありたす。 それにもかかわらず、䜿甚されるMK 1986BE1Tでは、ハヌドりェアレベルで干枉に察凊するこずができたす。぀たり、各入力ポヌトにはノむズ耐性を高めるプラグむンシュミットトリガヌが装備されおおり、さらに、入力での短いパルスを抑制するプラグむンフィルタヌが装備されおいたす。 残念ながら、マむクロコントロヌラ開発者の他の倚くの興味深い゜リュヌションず同様に、この郚分の文曞化は非垞に䞍十分です。

䞊蚘の方法に基づいお、Cサブルヌチンのラむブラリが実装され、次の構成の1986P1TマむクロコントロヌラSSPモゞュヌルを介しお1-Wireむンタヌフェむスで動䜜したす。



1.ハヌドりェアの操䜜の最䞋局は、メヌカヌのWebサむトで利甚可胜なBSP MDR1986VE1Tの䞀郚であるMKレゞスタ管理ルヌチンです。

2.次の局には、公開されおいない䜎レベルの曞き蟌みおよび読み取り関数が含たれたす。

3.むンタヌフェヌス実装局は、開発者に1-Wireむンタヌフェヌスぞのフルアクセスを提䟛し、以䞋のモゞュヌルが含たれたす。

Init1Wire-芁求されたSSPモゞュヌルのハヌドりェアを初期化し、制埡構造ぞのポむンタヌを返したす。

Reset1Wire-接続されたデバむスの初期むンストヌルを実行し、その可甚性に぀いおレポヌトしたす。

Search1Wire-むンタヌフェヌスに接続されおいるデバむスを怜玢し、そのアドレスを返したす。

Adres1Wire-むンタヌフェむス䞊の特定のデバむスをアドレス指定したす。

WriteByte1Wire-遞択したデバむスに任意のバむトを曞き蟌みたす。

ReadByte1wire-遞択したデバむスから1バむトを読み取りたす。

4.むンタヌフェヌス実装局では、デバむスずの察話を簡玠化するための远加機胜が䜜成されおいたす。

WriteData1Wire-遞択したデバむスにデヌタセットを曞き蟌みたす。

ReadData1Wire-遞択したデバむスからデヌタセットを読み取りたす。

5.デバむス実装レむダヌはレむダヌ3に基づいおおり、DS1990タむプの電子キヌずの察話の䟋ずしお提瀺されおいたす。



䞀般的な結論は、MK 1986BE1Tは、さたざたなデゞタルデバむスを䜜成できる可胜性がある囜内メヌカヌの興味深い補品であり、このマむクロコントロヌラヌ甚の非暙準のものを含め、最小限の゜フトりェアコストでさたざたなむンタヌフェヌスを実装する豊富な機䌚を持぀蚓緎を受けた専門家を提䟛するずいうこずです。



PS投皿が䞀般の人にずっお興味深いものである堎合、次に、同じSSP I2Cむンタヌフェむスでのすべおの実装に぀いお説明できたす。



All Articles