無料ブログ作成サービス JUGEM
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | - | - | pookmark |
ペリフェラルの素性について
なんか時計ばかりなので、DSPの話題を。
DSPには当然ながらいろいろなペリフェラルが付いていますが
これは大雑把に下記のように分類できます。
(1)昔から付いているもの
(2)最近付いたもの
(A)ほとんどのDSPについているもの
(B)特殊なもの
あたりまえな分類ですいません。
DMA、CPU(コア)、内部メモリは搭載が当然なので省きますと、
(1-A)としては
・McBSP
・McASP
・EMIF
・HPI(PCI)
・Timer
・GPIO
この辺のものはC6000だけでなくC5000などにもあって
とてもベーシックなものです。
(1-B)としては
・VCP,TCP
・UTOPIA
この辺ものは、C6000DSPがテレコム系のアプリに
よく使用されている関係で付いているものと言えます。
(McBSPのA-law(ロウ)/u(みゅー)-lawもそうですね。
これらは、音声帯域のフィルタです)
(2-A)としては
・DDR I/F
・EMAC/GEMAC
・VideoPort/VPSS(VPBE/VPFE)
(2-B)としては
・ARM9、Cortex-A8コア
・CAN
・PWM
・VLYNQ
・UART
・SPI
・I2C
※I2C、SPI、UARTの機能はMcBSPやMcASPの
レジスタの設定によって実現可能です。
UART、SPI、I2Cが付いていないDSPでも、McBSPや
McASPがあればI/Fすることができます。

ということで、特定の特殊なペリフェラルを使うのでなければ、
(1-A)、(2-A)あたりを押さえられれば新しいDSPが出てきても
動揺が少なくて済みます楽しい
この辺のペリフェラルはマニュアルも日本語化が進んでいますし。

マニュアルですが、TIのドキュメントはマニュアルも含めて大量にあります。
私も初めてTIDSPをはじめたときは面食らいました。
というかほとんど拒否反応に近いものでした。ショック
しかし、(1-A)などはデバイスが変わってもほとんど機能には変化はありませんので
この辺の日本語マニュアルを見るところから馴れてみてはいかがでしょうか?

TIのドキュメントには3種類ほどカテゴリがあります。

1つはデータシート、エラッタです。
これは、そのデバイス固有の情報です。データシートには
ピンの名前や番号、レジスタのアドレス、メモリマッピングや信号タイミング、
パッケージの寸法などはすべてこれに記載されています。
エラッタにはそのデバイスで見つかったエラー情報が書かれています。
使いたかった機能が実はそのレジビジョンでは使えなかったということがないように
しっかり確認することが必要です。
特にハードウェアの設計では、取り返しが付かないこと(たとえばピン処理を間違って
デバイスが正常に動作しない、しかもBGAパッケージで、ピンが基板上に出ていない
といった場合、手も足もでません。。。)になりかねませんので、常に最新のエラッタ
情報がないかどうか確認しましょう。

次にユーザーズガイドというSPRUというファイル名で始まるPDF群があります。
ユーザーズガイドは、ペリフェラルについてのマニュアルです。
McBSPならMcBSPとしてマニュアル化されています。
その文書内で、641x向け、67x向けと具合に、動作に違いがあるところ、
レジスタ内容に違いがあるところで書き分けられています。

最後はアプリケーションノートです。これはSPRAというファイル名で始まります。
これは
・その時期
・そのデバイスで
・実現できたこと
がレポート形式でまとめられています。
たとえばDSPとNECのマイコンを接続するといったかなり具体的な情報です。
場合によってはサンプルプログラムがあります。
当てはまる事例があればかなり有用です。
ただし、内容はあくまで、
・その時期
・そのデバイスで
・実現できたこと
なので、デバイスが変わったり、リビジョンがあがったりなどの要因で
現在にはそぐわない場合もあるので注意したほうが良いでしょう。

TIのDSPのドキュメントはこの3種類に分類されます。
日本語化してある文書は上記のSPRAやSPRUではなく、SCJなどのファイル名に
なっていたりするので注意してください。


| 了一 | ペリフェラル | comments(0) | - | pookmark |
HPI
C6000 DSPのHPIというペリフェラルについて書きます。
HPIはHost Port Interfaceの略です。
これはC6000に限らず、C5000DSPにもついています。
機能としては、DSPのアドレス空間に対して、外からアクセスすることが
できるというものです。
C6000シリーズのDSPは、プログラム用、データ用と分かれておらず、
フラットなメモリ空間を持っています。
0番地からFFFFFFFF番地までの間に、内部SRAMやEMIFの4つの外部領域や
各ペリフェラルのレジスタまですべてマッピングされています。
ということで、HPI経由で接続されたホストマイコンから、これらすべてに
対してリード/ライトすることが可能です。(キャッシュ関係のレジスタなど
一部例外はありますが)

前回ブートのところで書いたように、ホストマイコンがこのHPIを使って
DSPのメモリ空間にプログラムを書き込み、ブートさせることができます。
また、HPIは結構高速なバスです。使い方やデバイスにもよりますが
100MB/s程度は出せます。そのため、ホストから画像データをDSPに接続された
SDRAMに書き込むなんていう使い方もできます。

注意点としては、HPI経由でDSPのすべての領域に対してアクセスが可能なので、
ホストのプログラムが間違ってDSPのリザーブエリアにアクセスしてしまったり
意図しないレジスタ操作をしてしまわないように、ホストのプログラムを作成
する必要があります。

HPIはホストからはDSPをSRAMのように見立てて接続することができます。
接続例は、TIのWebのアプリケーションノートやユーザーズガイドを見るのが
良いと思います。下記のようなドキュメントも参考になるでしょう。
http://focus.tij.co.jp/jp/dsp/docs/dspsupporttechdocsc.tsp?sectionId=3&tabId=409&abstractName=spra536b

アクセスシーケンスは、ホストから以下のDSPの3つのレジスタに対して操作をします。
HPIC
HPIA
HPID
HPICはコントロールレジスタです。
これから行うアクセスがリードかライトか、自動的にアドレスをインクリメントさせるか
といった設定を行います。
HPIAはアドレスレジスタです。
ホストがリードやライトをしたいアドレスを書き込みます。
HPIDはデータレジスタです。
HPIAで指定したアドレスのデータをホストからリードやライトをします。
以上のように、アクセスシーケンスとしては3ステップあります。
これではあまり高速ではなさそうですが、アドレスの自動インクリメントモードを
指定すると、HPIC、HPIAに対しては最初の1度だけの設定で、後はHPIが自動的に
アドレスを増やす(減らす)ながら指定されたアドレスへのリードライトを行います。
これは、画像データやレジスタなど、
まとまったデータをリードやライトしたいときなどに有効です。

さて、HPIからのアクセスとDSPのコアからのアクセスが、同じ場所に同時に起こったら
どうなるのでしょうか?
後からアクセスしたほうが待たされます。
DSPコアが待たされる場合はストールします。HPIが待たされる場合はHRDYというレディ
ピンがアサートされ、ホストマイコンにNotReadyを伝えます。
基本的にはプログラムで、コアとホスト両方が同時に同じ領域にアクセスすることを
回避したほうが、こういったことに頭を悩ませる必要がないのでお勧めです。

HPIにはいくつかの種類があります。
HPI16
HPI32
これはC641xやDM641/DM642についているHPIです。
もっともポピュラーなものでしょう。
16や32はHPIDのバス幅です。DSP自身は32bitのデータ幅なので、
HPI16のときはHPIAやHPIDには2回アクセスが発生します。
UHPI
これは6727や6455といったデバイスについているHPIです。
基本的にはHPI16やHPI32と変わりませんが、拡張されたモードとして
アドレス、データ分離モードというのがあります。
HPI16やHPI32では、データ線をアドレスとデータで共用しています。
UHPIではこのモードのほかにデータ線とアドレス線を物理的に
分離して配線することができるモードをサポートしています。
これにより、ホストからは本当にSRAMのような感覚でアクセスを行うことが
できます。

以上HPIでした。



| 了一 | ペリフェラル | comments(0) | - | pookmark |
C6000DSPのブートについて
C6000DSPのブートについて。
どんな検索ワードでこのブログが探されているかを管理画面で見ることができまして、
そのなかにブートというキーワードでここまで来られた方がいるようなので、今回は
ブートの話。

C6000DSPはチップに内部にFlashROMなどプログラムを書いておけるエリアを持ちません。
C2000やMSP430というマイコンはFlashやOTPを内蔵しています。
C6000DSPのメモリはゼロ番地から内部SRAMが始まり(ゼロ番地からかどうかは
最近ではデバイスによりますが)、外部メモリ(EMIF)や、各種ペリフェラル設定の
レジスタまで、すべてフラットな1本のアドレス空間に存在します。

DSPは電源とクロックが供給され、リセットが解除されると、
まず最初にブートモードを決めるピンの状態を読みに行きます。
ブートモードは一般的に3種類ほどあります。
(1)ROM Boot
(2)PCI/HPI Boot
(3)NoBoot

それぞれのモードでDSPの動作は若干異なりますが、要点としては、
DSPはリセット解除後にゼロ番地からプログラムの実行を始めます。
しかしゼロ番地はSRAMで、リセット解除後は何もプログラムが書かれていません。
ブートモードは、このSRAMのエリアにどのような方法でプログラムを転送するのか
を決めるものです。

(1)ROM BootはEMIFの所定のCE領域に接続されたFlashメモリなどから
DSPのEDMAが自動的に内部SRAMへプログラムを転送するモードです。
ユーザーはDSPのプログラムをFlashROMに書き込んでおけば、リセット解除後に
DSPが自分でプログラムを内部SRAMに転送し、転送完了後にゼロ番地から実行を
はじめます。
制限としては、Flashメモリなどから転送できる最大サイズが0x400(1KByte)という
点です。これを超える転送はできません。
そのため、ユーザーが作成したプログラムが1KByteを超える場合(最近は大抵越えますが)
2段階ブートという手法をとります。
要するに1段目には2段目(ユーザープログラム)を転送するためのプログラムを
書いておき、ROM Bootで1段目をロードし、1段目のプログラムで本体のプログラムを
展開するという形を取ります。

(2)HPI/PCI Boot
これは、外部メモリにプログラムを置いておくのではなく、マイコンなど
ホストからDSPのメモリにプログラムを転送して、転送完了後DSPに
トリガを与えることでDSPが実行を始めるモードです。
DSPのほかにマスタとなることができるプロセッサがあれば、この方法が可能です。
HPIやPCIというペリフェラルはDSPのメモリ空間のほとんどすべてにアクセスが
できるペリフェラルです。すべてですので、ホストからDSPのペリフェラルレジスタに
値を設定することも可能ですし、DSPに接続されたSDRAMにアクセスすることも
可能です。
このブートモードでは1KByteという制限はありません。

(3)No Boot
このモードは、要するに何もしないというモードです。
デバッグ、開発の時に使います。
DSPは何かしらブートモードが設定されているとそこからプログラムをロードして
実行しようとしてしまいますので、場合によってはバグの原因となるレジスタ設定も
してしまう可能性もあります。 このモードに設定することでそうしたプログラムの
実行を停止させ、JTAGによるデバッグをしやすくします。

以上がC6000DSPの主なブート方法です。
デバイスによってはこのほかにSPIブートやSRIOからのブートをサポートするものも
あります。




| 了一 | ペリフェラル | comments(0) | - | pookmark |
動作がおかしいと思ったら?
DSPのJTAGのリセットピンが充分に外部プルダウンされていないと、JTAGが動くことがあって、本来の動作を阻害することがあります。
内部プルダウンされているからってこれをあまり信用せず、自分できちんと処理すべきです。
| 了一 | ペリフェラル | comments(0) | trackbacks(0) | pookmark |