ハードウエア工作である。簡単なことではトップクラス。物理的な工作そのものも単純だが、 オプションポート16 のシリアルの電圧レベルの仕様がどうであれ 自分自身と繋ぐぶんにはレベルコンバータのたぐいは必要ないはずだという点も大きい。 シリアルの実装を調べることすらしなかった。わはは。
なお、コネクタ単品でなくこういうケーブルを買ってバラすのは コネクタが市販されていないのでやむなくということもあるが、 それと同時にこのコネクタに合うハーネスと変換基板を手に入れるという意味合いもある。 なので、コネクタが合えばどれでもいいというわけではなく、コネクタ内に仕込む回路サイズとかを考えて選ぶべき ... ではあるんだが、実際そこまでえりごのみしてる余裕はないだろな。
コネクタピンからケーブルの各線まではほぼ一対一結線になっている。電源供給端子だけが繋がっていない。
基板を表(コネクタがのってる側)からみて、コネクタを奥に、ケーブルを手前に置くようにした時↓に右から 1 番 〜 16 番。 サブコネクタはとりあえず右がコネクタ側から 1 〜 6 番、左がケーブル側から 1 〜 6 番とする。
No. 名称 ポートの方向 サブコネクタ 線色 備考 1 PWR IN(+) 2 PWR IN(+) 右1 薄ベージュ 3 TxD out 右2 ピンク 4 RxD in 右3 緑 5 RTS out 右4 紫 6 CTS in 右5 黒 7 DSR in 右6 赤 8 Signal GND 茶 9 USB D+ 左1 青 10 RI in 左2 灰 11 Vcc(3.3V) 下記参照 12 USB D- 左3 オレンジ 13 NC/Reserved 14 DTR out 左6 水色 15 PWR GND 16 PWR GND FG Frame GND 黒(太) ケーブルのシールドに接続 左4 黄 下記参照 左5 黄緑 下記参照
コネクタの 16 番ピン、サブの左4, 左5 ピンは 3 端子のチップ部品に繋がっている。 テスタで見るかぎり、左4, 左5 ピンから各々 1.5M ohm くらいの抵抗にダイオードいれて 16 番(つまり PWR GND) に接地してある風。コネクタ接続検出用に思えるが、詳細不明。
また、11 番ピンは A300 では NC ということになっているが、 旧ザウルスや C700 では Vcc (3.3V) ということになっている。 実際はどうかというと、A300 でもちゃんと 3.3V 出ていた。
必要なものから蛇足なものまでな註釈。
RTS 〜 CTS、DTR 〜 DSR と繋ぐ。クロス接続の variation は色々あれどザウルスのシリアルに CD が出てないから、 これ以外に結線しようがない。Variation としては RI を RTS に繋ぐくらい。
クロスケーブルを作るには、オプションポート16 側のコネクタは無改造のまま、CdmaOne側のコネクタをぶっちぎり、 別のオプションポートコネクタをつけて内部を以下↓のように結線する。 RTS 〜 RI 間は実際には繋がなかった。
結線が右コネクタに集中するあたりが素晴しい(なにが?)。 素晴しすぎたので、右側はサブコネクタの上蓋を破壊して、コネクタ内と外で互い違いに配線している。 ... ぜんぶ内側でもよさげだったが。
線色 サブコネクタ ケーブル側名称 コネクタ側名称 緑 右2 RxD TxD ピンク 右3 TxD RxD 黒 右4 CTS RTS 紫 右5 (, 左2) RTS CTS (, RI) 水色 右6 DTR DSR 赤 左6 DSR DTR 茶 SG ランドへ Signal GND Signal GND シールド FG ランドへ Frame GND Frame GND 灰 接続せず (or 右4) RI (RTS) 薄ベージュ 接続せず PWR IN(+) 青 接続せず USB D+ オレンジ 接続せず USB D- 黄 接続せず 黄緑 接続せず
ところで、論理的な詳細はみてないが、output は正論理だが input は負論理とかいった変態な仕様になってねーだろうな? クロス直結で論理的にも正しんだろーな ...![]()
これ、もちろん SL-A300 と SL-C750 をシリアルで直結する目的で作った。
Root filesystem 入れ換え途中で reboot した時に外から入るための担保である。
USB LAN (or CF の LAN や IrDA) が繋がるとこまでいけばシリアルも用無しだが、
USB LAN が起動さえしない時点では画面にエラーメッセージすらでない C750 ではデバッグがむちゃくちゃ大変。
はよカーネルソースだしてくれ、シャープさんや
# stty < /dev/ttyS0 speed 9600 baud; line = 0; -brkint -imaxbel
... ほぇ〜。
きちんと書くと、
... と書いていたが、確認した。RTS/CTS 以外の実装はない。 ポートに出ている DTR は常に 0 (3.3V) になっている。電源を切ることで 0 V (つまり 1) に変化させることはできるが。
ところでこのあたり、まともにソース読めなかったんだが、
% diff -u sla300/kernel/drivers/serial_pxa200.c slc700/kernel/drivers/serial_pxa200.cなる技で読んだ。SL-C7x0 ならば FFUART を使って実装してあるはずの部分を SL-A300 でどう実装してあるかとゆーやつ。 で、なぜか CD が ASIC3_GPIO_PSTS_D & COM_DCDなる位置にあり、 CD による割り込みも受け付けるようになっていることを知る。
GPIO 使ってんのはいいんだが、CD ってポートに出てないし、そのうえ ioctl() では CD は GPIO のでなく UART のを読みにいってんですけど ...。
C7x0 ではシリアルポート (実体は Full function UART である)
が APM の支配下にあり、非 open 状態ではクロックが停められている。
ラッチが働かないので Modem Status Register には入力ピン(CTS/DSR/RI) の入力(つーか電圧) が反映されない。
open(/dev/ttyS0) している間のみ正しい値が取り込まれている。
一方、スタティックには動作しているので、出力ピンのほうは正しく動作する。
このあたりは /proc/cpu/register/ の FFMSR についても同じ。ま、単に register を読んでるだけだから。
したがって使うには CKEN (Clock Enable Register) の対応ビット (CKEN6_FFUART) を 1 にする必要がある。 カーネル内ではシリアルを使うためにおおむね以下の手順をふむ。IrDA も同様。 もちろん userland から使うには単に open すればいい。
xpa210_discovery_serial_power_on(); // B ではドライバ?の電源オン。C ではなにもしない。
if (xpa2X0_is_ff_uart(info->iomem_base)) { // ポートが FFUART であるか?
CKEN |= CKEN6_FFUART; // FFUART にクロック注入開始。
if (!change_power_mode(LOCK_FCS_FFUART, 1)){ // APM に FFUART の使用を宣言。
return -EAGAIN;
}
}
... つーか、いいかげん別ページに分離しろよ > オレ
つーことで、この件を 塚本さん家のに追加。