ma2013
2015年1月9日 10時37分
いつもお世話になっております。
MCSのマーです。
armadillo840のCON7の40ピンが,
GPIO(gpio73)が有効な時,
初期状態で,
directionがinになっていますが,
valueの値は入力によって変わりませんでした。
一回echo in > direction を実行すると正常に動作します。
その他のGPIOはまだ確認していません。
以上,どうぞ宜しくお願いいたします。
コメント
ma2013
y.nakamura
中村です。
先に後半の質問から・・・
> ちなみに,カーネルソースで,シリアルI/Fについて,
> RTSをプルダウン,CTSをプルアップしているのは,
> 何の理由でしょうか?
CTSをプルアップするのは、CTSの信号線が未接続のときに、
ソフトウェアとしてCTS=OFFとなるようにするためだと思います。
アクティブLOWなので。
RTSはTXD同じようにpulloffしてもよさそうですが、
ソースではどのポートもpulldownになってますね。
たぶん・・・ですが、起動後の早い時期に実行される
a840_scifx_init()では、まだRTSのポートは入力、もしくは
Hi-Zになっていることを想定し、シリアルポートとして
初期化されるまでの間はRTS=ONになるようにするため
ではないかなぁ、と思います。
(シリアルポート初期化までの間、RTS=ONにしちゃって
いいの?とも思うのですが)
RTSのプルダウンは、アットマークテクノさんの回答を
待った方がよさそうです。
> シリアルI/Fを有効にした時,
> CON7の4ピン(SCIFA_RTS_1_N)が,カーネルソースでプルダウンしていますが,
> オープン状態で計ってみると約2.5Vの出力が出ていますが,
> それが何の原因でしょうか?
そのとき、ソフトの方ではRTS信号はONしてますか?
それともOFFしてますか?
たぶんOFF(アクティブLowなのでポート出力はHigh)に
していると思うのですが、3.3Vに上がりきっていないのは
気になりますね。
あ、カーネルの設定でSCIFA1のCTS/RTSを使う設定に
しているのであれば・・・です。
質問とは直接には関係ないかもしれませんが、
840の製品マニュアルと、R1-Mobileのデータシートで、
CON7の4ピン(SCIFA_RTS_1_N/PORT23)のリセット時の
状態の説明が違っているように思います。
840の製品マニュアルの
表18.11 CON7 拡張入出力ピンの信号状態
では、4ピン(SCIFA_RTS_1_N)のリセット中の状態はPU、
リセット後の状態はIUになってます。
ところが、R1-Mobileのデータシートの
Table 54.1 List of Multiplexed Pins
では、/SCIFA_RTS_1(PORT23)のPullU/Dの欄は"-"に
なっていて、このポート(ピン)は、プルアップもプルダウンも
ついていないことになってます。
("-"という表記が「PUもPDもない」という意味だと思って
いるのですが・・・)
また、初期状態が書いてある
Table 54.2 Register Configuration
では、PORT23CRのInitial valueはH'20で、
やはり、PU/PDはoffです。
マーさん、
ちゃんとした回答になってなくて、すみません。
--
なかむら
ma2013
ma2013
ma2013
y.nakamura
中村です。
> CON7の4ピンが3.15 Vまで出ていますが,
> CON7の9ピンが約0Vで,Lowになっており,
> 同じなRTCピンですが,
> 統一していないので,
ドライバの初期化では、CON7の4ピンもCON7の9ピンも
gpio_request_pulldown()していますが、前に書いたように、
CON7の4ピン(PORT23)は内蔵のPU/PDがありませんが、
CON7の9ピン(PORT194)には内蔵のPU/PDがあります。
これが違いの原因ではないでしょうか?
ところで・・・
> CON7の4ピンが3.15 Vまで出ていますが,
前に書かれたのだと、2.5Vということでしたよね。
ソフト、あるいは測定の方法を何か変えましたか?
CON7の4ピンはRTSで出力ですが、デバイスをオープンする前は
GPIOの初期状態で入力になっていて、内蔵のPU/PDはなしなので、
外付けのPU/PDがなければ、Hi-Z。
それを2.5Vとか3.15Vと計測してしまっている、といことはないでしょうか?
--
なかむら
ma2013
ma2013
なかむら 様
いつもお世話になっております。
MCSのマーです。
申し訳ありませんが,
良ければ,もうちょっと教えていただきたいです。
プロセッサデータシートのTable 54.1 PullU/D 欄について
PD: 内臓プルダウンのみ有,対応端子電源投入後プルダウンでスタート PU: 内臓プルアップのみ有,対応端子電源投入後プルアップでスタート --: 内臓プルアップ,プルダウン同時無し PD/PU: 内臓プルアップ,プルダウン両方有,電源投入時に有効のはTable 54.2のInitial value欄の値と一致する
上記理解は正しいでしょうか?
y.nakamura
中村です。
> プロセッサデータシートのTable 54.1 PullU/D 欄について
>
> PD: 内臓プルダウンのみ有,対応端子電源投入後プルダウンでスタート > PU: 内臓プルアップのみ有,対応端子電源投入後プルアップでスタート > --: 内臓プルアップ,プルダウン同時無し > PD/PU: 内臓プルアップ,プルダウン両方有,電源投入時に有効のはTable 54.2のInitial value欄の値と一致する >
> 上記理解は正しいでしょうか?
Table 54.1 PullU/Dは内蔵PU/PDの有無だけを示していて、
初期状態はどのポートもTable 54.2のInitial value欄だと思います。
そのinitial valueの上位2ビットがPU/PDで、意味は
54.2.1 PORTn Control register (PORTnCR)
に書いてあります。
ということでいいのではないかと思いますが・・・
--
なかむら
ma2013
at_takashi.sasayama
笹山です。
> 840の製品マニュアルと、R1-Mobileのデータシートで、
> CON7の4ピン(SCIFA_RTS_1_N/PORT23)のリセット時の
> 状態の説明が違っているように思います。
>
> 840の製品マニュアルの
> 表18.11 CON7 拡張入出力ピンの信号状態
> では、4ピン(SCIFA_RTS_1_N)のリセット中の状態はPU、
> リセット後の状態はIUになってます。
>
> ところが、R1-Mobileのデータシートの
> Table 54.1 List of Multiplexed Pins
> では、/SCIFA_RTS_1(PORT23)のPullU/Dの欄は"-"に
> なっていて、このポート(ピン)は、プルアップもプルダウンも
> ついていないことになってます。
> ("-"という表記が「PUもPDもない」という意味だと思って
> いるのですが・・・)
>
> また、初期状態が書いてある
> Table 54.2 Register Configuration
> では、PORT23CRのInitial valueはH'20で、
> やはり、PU/PDはoffです。
R-Mobile-A1のデータシート Table 54.1 List of Multiplexed Pins
SCIFA_RTS_1(PORT23) の PullU/D の欄に出てくる "-" の意味ですが、
PORTnCRレジスタで PU/PD の設定ができないことを示しています。
また、リセット状態で PU/PDがあり PullU/D が "-" のピンは、
リセット後の状態で固定されます。
SIFA_RTS_1(PORT23)ですと、リセット後の状態は IU(Input PU) 固定ですね。
なお "-" のピンでも PORTnCRレジスタで設定を行うと、
PU/PDが有効になる事もありますが、
その際の動作は保証されていません。
その為、以下のコードには問題があります。
linux-3.4-at10 board-armadillo840.c
266行目 SCIFA1 の RTSをPD、CTSをPU
266 gpio_request_pulldown(portcr(23)); /* RTS */ # PullU/D が "-" の為、PD には設定はできない。 267 gpio_request_pullup(portcr(21)); /* CTS */ # PullU/D が PD の為、PU には設定できない。
345行目 SCIFAB の CTSをPU
345 gpio_request_pulldown(portcr(172)); /* RTS */ 346 gpio_request_pullup(portcr(173)); /* CTS */ # PullU/D が PD の為、PU には設定できない。
> CTSをプルアップするのは、CTSの信号線が未接続のときに、
> ソフトウェアとしてCTS=OFFとなるようにするためだと思います。
> アクティブLOWなので。
> RTSはTXD同じようにpulloffしてもよさそうですが、
> ソースではどのポートもpulldownになってますね。
> たぶん・・・ですが、起動後の早い時期に実行される
> a840_scifx_init()では、まだRTSのポートは入力、もしくは
> Hi-Zになっていることを想定し、シリアルポートとして
> 初期化されるまでの間はRTS=ONになるようにするため
> ではないかなぁ、と思います。
> (シリアルポート初期化までの間、RTS=ONにしちゃって
> いいの?とも思うのですが)
CTSのPullUpは、なかむらさん が既に記載されている通りの理由で、
PullUp(CTS=OFF)としていますが、
RTSに関しては、ご指摘の通り、シリアルポートの初期化前に、
PullDown(RTS=ON) になっていることは検討が必要と思います。
ピンのPU/PD設定の問題と合わせ、
今後の製品アップデートにて修正を行いたいと思います。
フィードバック、誠に有難うございました。
y.nakamura
中村です。
笹山さん、どうもありがとうございます。
> R-Mobile-A1のデータシート Table 54.1 List of Multiplexed Pins
> SCIFA_RTS_1(PORT23) の PullU/D の欄に出てくる "-" の意味ですが、
> PORTnCRレジスタで PU/PD の設定ができないことを示しています。
私が書いた説明は間違ってましたね。
「ということでいいのではないかと思いますが・・・」と濁しておいてよかった。
とすると、すべてのポートにPU/PDは存在すると考えて
いいのでしょうか?
このあたりのこと、つまり、
> PORTnCRレジスタで PU/PD の設定ができないことを示しています。
ということと、上に書いた「すべてのポートにPU/PDは存在する」と
いうことは、データシートのどこに書いてありますか?
> また、リセット状態で PU/PDがあり PullU/D が "-" のピンは、
> リセット後の状態で固定されます。
その固定値が
Table 54.2 Register Configuration
のInitial valueということですね?
> > Table 54.2 Register Configuration
> > では、PORT23CRのInitial valueはH'20で、
> > やはり、PU/PDはoffです。
...
> SIFA_RTS_1(PORT23)ですと、リセット後の状態は IU(Input PU) 固定ですね。
PORT23の PullU/D が "-" なので固定、ということはわかりましたが、
なぜ、 IU(Input PU)になるのでしょうか?
IUの"I"(Input)は0x20の2の部分なのでわかります。
わからないのは、"U"(PU)です。
54.2.1 PORTn Control register (PORTnCR)
のbit7, 6(PULMD)の説明で
0x: Pull-up/pull-down OFF
です。
--
なかむら
at_takashi.sasayama
笹山です。
今一度、整理します。
ピンにpull-upやpull-downが存在するかどうかは、
Table 1.2 Pin Assignment (480-Pin BGA Package) で確認してください。
そして、これら存在しているpull-upやpull-downをレジスタで変更できるかどうかは、
Table 54.1 List of Multiplexed Pinsで確認してください。
ここで、注意が必要なのはPORTnCRレジスタの初期値が、
リセット時のpull-upやpull-downの状態を示しているわけではないことです。
レジスタで変更ができるピンの場合は、
リセット後の状態とレジスタ初期値は一致していますが、
レジスタで変更ができないピン("-"表示)の場合は、
ハード的にCPU内部でレジスタと結線されているわけではないので、
PORTnCR の PULMD に何の値を設定しても影響はありません。
その為、このCPUの場合は PORTnCR PULLMD の初期値を、
「0x: Pull-up/pull-down OFF」としているようです。
他のCPUでは、pull-upやpull-downの制御スイッチがすべてレジスタに接続されていて、
レジスタの初期値がリセット後のpull-upやpull-downを表すCPUもありますので、
少し混乱しますね。
y.nakamura
中村です。
> 今一度、整理します
自分なりに、整理しなおさせていただきます。
> ピンにpull-upやpull-downが存在するかどうかは、
> Table 1.2 Pin Assignment (480-Pin BGA Package) で確認してください。
この表のの"Pin State during Reset"と"Pin State after Reset"が
Armadillo-840の製品マニュアルの
表18.11 CON7 拡張入出力ピンの信号状態
の"リセット中"と"リセット後"ということですね。
表18.11のSCIFA_RTS_1の"PD"と"PU"の件はわかりました。
「pull-upやpull-downが存在するか」はTable 1.2の
どこを見ればいいのでしょう?
表の最後のところ(Page 1-39)にある[Legend]で
IU: Input (pull-up MOS on)
ID: Input (pull-down MOS on)
PU: Pulled up (input buffer off; output buffer off; pull-up MOS on)
PD: Pulled down (input buffer off; output buffer off; pull-down MOS on)
以外ものはpull-up/pull-downが存在しない、ということでいいでしょうか?
PORT23については、IUなので、このポートはpull-upありで、
> そして、これら存在しているpull-upやpull-downをレジスタで変更できるかどうかは、
> Table 54.1 List of Multiplexed Pinsで確認してください。
のPORT23は"-"なので制御はできない。
1つ前の投稿で
> > > PORTnCRレジスタで PU/PD の設定ができないことを示しています。
> > いうことは、データシートのどこに書いてありますか?
と質問しました。
Table 54.1 List of Multiplexed Pins の"PullU/D"欄の意味は
データシートのどこで説明がされていますか?ということなのですが、
どこなのでしょう?
> ハード的にCPU内部でレジスタと結線されているわけではないので、
> PORTnCR の PULMD に何の値を設定しても影響はありません。
>
> その為、このCPUの場合は PORTnCR PULLMD の初期値を、
> 「0x: Pull-up/pull-down OFF」としているようです。
これは理解しました。
--
なかむら
y.nakamura
2015年1月10日 2時59分
中村です。
> armadillo840のCON7の40ピンが,
> GPIO(gpio73)が有効な時,
> 初期状態で,
> directionがinになっていますが,
> valueの値は入力によって変わりませんでした。
>
> 一回echo in > direction を実行すると正常に動作します。
800シリーズの勉強のつもりで、GPIOまわりのカーネルソースと
R-Mobile A1のデータシートをざっとみてみました。
カーネルメモリ上では初期値としてinputになっていますが、
(gpio_desc[]のflagsのFLAG_IS_OUTビットが0なので、
catでdirectionを読み出すと"in"になる)
GPIOの初期化処理で、明示的にはinput/outputの設定を
していないように見えます。
(board-armadillo840.cのactivate_ext_gpios()などです)
リセット時は、PORT73CRの初期値は0xC0なので、
inputもoutputもdisableです。
--
なかむら