Atmel Studio 6のシミュレータでデバッグしてみようとしたところ、掲題のエラーが発生。
字句どおり、デバイスが対応していないなんてことはありえないので原因を探ったところ、コンパイラの設定が問題だった。
最適化がオンになっているとブレイクポイントが有効にならないのだ。
Optimization Level を None(-O 0)にすることで解決。
(最近、IDEが信用ならない・・・)
Atmel Studio 6のシミュレータでデバッグしてみようとしたところ、掲題のエラーが発生。
字句どおり、デバイスが対応していないなんてことはありえないので原因を探ったところ、コンパイラの設定が問題だった。
最適化がオンになっているとブレイクポイントが有効にならないのだ。
Optimization Level を None(-O 0)にすることで解決。
(最近、IDEが信用ならない・・・)
SPI通信について理解が浅かったのでわかりやすくまとめてみた。
クロックが正論理なのか負論理なのかをクロックの極性という。(Clock Polarity=CPOL)
SPI通信においては以下のように定義する。
クロックは1クロックで0から1、1から0に切り替わるがその切り替わりのタイミングのことをクロックの位相という。(Clock Phase=CPHA)
SPI通信においては以下のように定義する。
SPI通信ではCPOLとCPHAの値によって4つのモードを定義する。
CPOL | CPHA | モード |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 2 |
1 | 1 | 3 |
以上
以下の図がわかりやすいだろう。
cf.https://www.diolan.com/dln_doc/spi-transfer-modes.html
(追記:20160113) モードを暗記する場合 、以下のように考えると覚えやすい。 デフォルトをモード0とする。 クロックが1→ 0になるときに取り込みを行う場合、モードに1を足す。 クロックが負論理ならモードに2を足す。 まとめると単にこれだけのことである。
==
余談
ネット上の解説では、CPHAのタイミングについて立ち上がり立下りなどという表現が使われたりしているがHi Lowの切り替わりと勘違いしそうなのでやめた方がいい気がする。
またサンプルされない位相でデータがシフトされるという説明がよくあるが一般的に言い切ってしまうとmode=0のときの1ビット目はどうするんだという話になったり、mode=0の最後では何をシフトしてるんですか?という話になったりするのでやめた方がいい気がする。
そもそもシフトタイミングについてはサンプルのタイミングさえ厳密に決まれば自由のはずなので仕様的には未定義なのではないだろうか?
なかなかよさげと思っていたらバグを見つけた。※
Project Explorer でcファイルを右クリックするとResource Configurations というメニューが出てきて、Exclude from Build...というサブメニューからビルド時にincludeするかどうかが選べるのだが、ヘッダーのhファイルの場合、Resource Configurations自体が出てこないのだ。
こうなるとインポートしたプロジェクトなどであらかじめヘッダーファイルがexludeされている場合、eclipse上で元にもどせないのだ。
仕方がないので.cprojectを直接修正(※※)してincludeすることができたがこういうことが続くようだと後先不安である。
やはりコマンドラインビルドが正義なのだろうか。
※バージョンは
LPCXpresso:
Version: LPCXpresso v4.3.0 [Build 1023] [2012-09-19]
※※具体的には
cproject > storageModule[moduleId="org.eclipse.cdt.core.settings"]>
cconfiguration[id="com.crt.advproject.config.exe.debug.1584568070"] >
storageModule[moduleId="cdtBuildSystem"] > configuration > sourceEntries >
entry[name="driver"]
のexcludeingからincludeしたいヘッダファイル名を除いた。
cf.http://www.nxp.com/documents/data_sheet/LPC11CX2_CX4.pdf
データシートよりP1_6がRXD、P1_7がTXDである。
シリアルポートとクロス接続。もちろんGNDも繋ぐ。
サンプルプロジェクトのuartをビルドして書き込み。
ボーレートなどの設定は以下の通り。
単なるエコーバックのプログラムなので入力した文字がそのまま表示されればOK.
==
※RS485について
はじめ、データシートにはRS485サポートなどと書かれていたので通常のTTLレベルの出力はないのかと勘違いしてしまったのだが標準の動作がTTLレベルの出力のようだ。
データシートを読んだところ差動出力に相当するピンがないのでCANのようにレベル変換までの仕組みはなく485のプロトコルのサポートまでがあるということのようだ。
(RTSピンで送受信方向の決定を行うらしい cf.http://www.nxp.com/documents/user_manual/UM10398.pdf P.191)
デモプロジェクト(rs485)でも485のポートを使えとは書いておらず2枚ボードを使用して送受信を行えと書いてあるので多分そういうことなのだろう。
暇があれば検証したい。
秋月で売っていたLPC11C24評価ボードLPCXpressoBoard OM13012を試してみた。
cf.http://akizukidenshi.com/catalog/g/gM-05090/
C:\nxp\LPCXpresso_4.3.0_1023\lpcxpresso\Examples\NXP\LPC1000\LPC11xxの
NXP_LPCXpresso11C24_2011-01-27.zip
をLPCXpressoでImport。
can_onchipプロジェクトをビルドしてcan_onchip\Debug\can_onchip.axfをProgram FlashするとCANのサンプルプログラムが動作する
can_onchip_readme.txtによるとボーレート125Kbpsで"TEST"というデータを送ってくれるようだ。しかしメッセージIDの指定がない・・・
CAN Configuration: CAN bus baudrate: 125kbps Sample Project Details: 1. Upon reset, the LPC11C00 will send a simple CAN frame using the on-chip CAN drivers. It will send a CAN frame with its data contents of "TEST".
ロジアナでみてみたところ、ちゃんと出力されているのが分かった。(ちなみにロジアナの接続はCAN_LをGNDとして、CAN_Hを測定。それをReverseしたものをプロトコルアナライザへという流れ)
ちなみにメッセージIDは0x345だった。
終端抵抗は内部でもっているようで測定したところキッチリ120Ωあった。
とりあえずは以上。
ARMの環境をいくつか試しているがNXPがExampleの説明が親切だったり公式の開発環境がeclipseベースでコード制限も128kbまでと余裕があったりするので割と取っ掛かりやすそうである。
USBシリアル変換モジュール(FT232RL)をPCに接続。ドライバのインストールやポートの確認は済んでいるものとする。
マイコン(LPC1114FN28/102)とUSBシリアル変換モジュール(FT232RL)を接続する
cf. http://akizukidenshi.com/catalog/g/gK-01977
FlashMagicのインストール
cf. http://www.flashmagictool.com/
FlashMagicの起動
正常に完了した場合はステータスバーにFinishedとでる
次にStep3のHex Fileを選択する。(添付のled.hexを使用)
再度、Startで書き込み
完了したら
hexファイルの作り方は別途解説予定。
更新:20130810:hexファイルが怪しいのでelm-chanさんのソースからビルドしたものに変更。
cf.http://elm-chan.org/junk/32bit/report.html
インストール時にServerパッケージを選択。
ホスト名は DHCPに任せず手動設定する。
既存のsambaを削除
yum -y remove samba*
samba3xを追加
yum -y install samba3x*
nmbの起動
/etc/init.d/nmb start
・常時起動は
chkconfig nmb on
iptablesを切る。(外向けでないなら)
/etc/init.d/iptables stop
※常時オフは
chkconfig iptables off
Windowsから解決したいだけなら以上で完了。
/etc/nsswitch.confを編集
host:s files dns
を
hosts: files wins dns
とする
以上でLinuxからも解決できるようになる。 (ファイル保存後から有効)
しかしlinuxからホスト名でpingを叩いてみるとわかるが開始するまでが非常に遅い(10秒ほど)。得られたIPから逆引きで正式なホスト名を取得しようとするため。
※ ping www.google.comなどとしてみるとよい
なのでpingしたいときは-nオプションをつけるとよい
ping -n hostname
で3xだとnmblookupがないんだがどうすればいいのか・・・
たとえばメモ帳でCtrl+Hを押しっぱなしにして連続で削除しようとすると何文字目かで置換ウィンドウが開いてしまっていた。
原因はMicrosoftのマウス・キーボード共有ソフトのMicrosoft Garage Mouse without Bordersだった。
キーフックする系のアプリはなにかとややこしい。
逆は考えない
以上
Chromeの起動オプションに以下を追加で解決。
--ssl-version-max=tls1
簡単な経緯:
プロパイダーがJCOMなのだがWiMAXでみると普通に使えるのでおそらくプロパイダー側のtls周りが対応してないということだろうか。
cf.http://code.google.com/p/chromium/issues/detail?id=142748
追加:
それでもGoogle検索の重さが変わらなかったので(反応したり反応しなかったり)、アプローチを変えてみた。
Chromeの検索エンジンの編集でGoogleのデフォルトが以下の通りのURLなのだが、
{google:baseURL}search?q=%s&{google:RLZ}{google:acceptedSuggestion}{google:originalQueryForSuggestion}{google:searchFieldtrialParameter}sourceid=chrome&ie={inputEncoding}
シンプルな↓に変更。これでしばらく様子を見てみる。
http://www.google.co.jp/search?q=%s