JP7FKFの備忘録

ヒトは,忘れる生き物だから.

Cisco Catalyst 2960G switchを修理した話

壊れたCisco Catalyst 2960Gなswitchを譲渡してもらった.

壊れたCiscoCatalystスイッチを譲渡していただける機会があった. 私はモノを修理するのが好きなので,今回も治すことを試みた.

症状としては,電源を入れてもコンソールからは何も出力されない. Catalyst 上のインジケータLEDも,特に意味のある光り方をしない. (具体的には,電源を入れると点灯こそするものの,その後は一切変化しない.電源を入れるたびにオレンジ,緑等の色が変化する.電源を入れるたびに光ったり,光らなかったりするLEDが出るなど,ステータスを表しているとは到底思えないような光り方をしていた.)

LED表示はこんな感じ.コンセントをさしたり抜いたりすると光るところが変わったりする.明らかにおかしい. f:id:jp7fkf:20180906124027j:plain:w500

Ciscoバイスはどの順序で各メモリを利用するのか.

ここで,Cisco スイッチの起動順序をおさらいしてみることにする. 私はそもそもあまり詳しくないので,調査してみてわかったことを簡単に書いてみる.正しいかどうかはわからない.

起動順序は下記URL等を参照した.
Ciscoデバイスの操作 - Ciscoルータ - メモリの種類と起動順序

ciscoバイスは,Flash, NVRAM, RAM, ROMの4種類の記憶装置が存在する. 具体的には,ROMはPOST,Bootstrap,ROMMON, miniIOSなど,最小限のソフトウェアが乗っている.FlashIOSイメージが格納され,起動時にRAMにロードされて実行される.RAMはIOSがロードされるほか,running-confingもここに乗っている.NVRAMはwrite mem等をした際に書き込まれる領域,つまりstartup-configが格納されている.

というわけで,基本的にロード順序としてはROM -> Flash -> RAM -> NVRAM の順序で読み込まれるような気がしていた.しかしながらよく考えると,ROMに書かれているプログラムもRAMに展開されて実行されるような気もしていた.これはコンピュータアーキテクチャが分かっていればすぐにわかることなだろうが,ciscoがどのようなアーキテクチャで作っているのか私は知識がなく,断定はできなかった.

現状として,電源を接続しても,Catalyst 上のインジケータLEDは,特に意味のある光り方をしない.点灯こそするものの,その後は一切変化しない,など,syst, statランプの点滅などもなかったため,POSTすら実行できていない可能性が高いと推測をした.

起動しない原因と可能性

これらの原因として考えられるものの1つとして,ROMの破損が考えられた.しかしながらROMが破壊していた場合,ROMを交換するだけでなく,その中に書き込まれているプログラムも他のciscoスイッチ等からコピーする必要があり,現状その手段を持ち合わせていないため,交換して修理することは難しいと判断した.

2つ目の可能性として,POSTやブートストラップが,仮にRAM上に展開されて実行される場合,RAMの故障によりPOSTが動いていないことが考えられた.

RAMは電源断時には情報は持つことはなく,電源が入っているときのみ記憶動作を行うため,これは交換することで修理が可能であると考えた.

他の可能性として,根本的にデバイスに供給されている電源の不具合(各電圧ラインの電圧が異常である等)が考えられたが,これはテスタですべての電圧ラインを確認し問題ないことを確認した.

FlashとNVRAMについては,これが破壊されていた場合でも,最低限POSTは走るであろうと考えられたため,今回はこれらの故障が原因ではないと判断した.

上記の判断と,自分が行うことのできるレベルとして,RAMを交換して様子を見るということが初手として打てる手であると判断し,当該スイッチので用いられているRAM交換することにした.

DRAMの交換を試みる.

スイッチの蓋をあけると,RAMと思われるデバイスが見つかった.
f:id:jp7fkf:20180906124034j:plain:w500
f:id:jp7fkf:20180906124051j:plain:w500
型番を調べるとビンゴで,512MBのSDRAMである.
こいつはMicron TechnologyのMT46VというシリーズのSDRAMのようだ."-6T"というのは,Speed Gradeで,使えるClock Rateを示している.
Micron MT46V Series DDR-SDRAM

本来であれば同一の型番のDRAMを用いるべきであるが,digikey等で検索しても1qty. から適正価格で買えるものが見つからず,入手性の観点から互換的に利用できると考えられた"-5B"というSpeed Gradeのものをを代わりに用いることとした.こちらはより高速なクロックに対応したモデルであるが,データシートを見て,当該スイッチで用いられているクロックでも問題なく動作すると判断した.

最近ではマルツパーツ館digi-keyのパーツが1個から購入できるので大変便利である.私もこれを利用させていただくことにした.

パーツは5営業日くらいでマルツの店舗に到着し,受け取ることができた.十分早い.
f:id:jp7fkf:20180906124043j:plain:w500
交換するDRAMが入手できたので,早速交換を行う.

交換の仕方は割とワイルドに?交換対象のDRAMの足にたっぷりの半田を盛り付けて熱容量をあげておく.半田を盛ったら,周囲の部品を壊さない程度に半田ごてをがっつり当てて半田を溶かして部品を取り外す.
f:id:jp7fkf:20180906124058j:plain:w500

取り外すことができた.
f:id:jp7fkf:20180906124111j:plain:w500

半田の残骸をはんだ吸い取り線等を用いて綺麗に取り除く.
f:id:jp7fkf:20180906124119j:plain:w500

綺麗になったら,いよいよ新しいDRAMを取り付ける. DRAMと基板をマスキングテープ等で固定すると,面実装部品でも比較的簡単に半田付けを行うことができる.軽くマスキングテープで固定し,足とパッドにフラックスを塗布する.面実装部品の場合は,ほとんどの場合フラックスを塗ることは必須だと思う.塗っておくと上手にパッドに半田が流れてくれるし,ブリッジもしにくくなる.無洗浄タイプを用いると,後から洗浄を行わなくてよかったり,余計な腐食の心配をしなくていいので楽だと思う. f:id:jp7fkf:20180906124127j:plain:w500

フラックスを塗ったら,いよいよ半田付けを行なっていくが,このような面実装部品では軽くコテ先に半田を含ませて足をなぞるようにするとうまくいく.

この要領で全てのパッドと足がはんだづけされていることを確認する. ブリッジ等が起こっていると,電源を入れた場合にDRAMだけでなく周辺の回路も破壊することがあるので,できるだけルーペなどを用いてブリッジがないということをしっかり確認する.
f:id:jp7fkf:20180906124144j:plain:w500

DRAMの交換が終わったので,元どおりにシャーシを組み上げ,電源を入れる.これでLEDがうまく点滅,点灯したり,コンソール表示が出れば成功だ. 緊張の一瞬である.
f:id:jp7fkf:20180906124137j:plain:w500
f:id:jp7fkf:20180906124148j:plain:w500

無事息を吹き返した. よかった.

まとめ

これらの事象が示していることは,POSTは確かにRAMにロードされて動いているとみられるということだ.RAMが死んでいるとPOSTすらまともに走らないし,LEDも無論まともに点灯しない.当たり前といえば当たり前の話なのだが,アーキテクチャを理解していないとわからないことでもあった.この事実を知ったことは,ふるまいが確認できたという点で,大変良い経験となった.

というわけで,無事Cisco Catalyst 2960G を修理することができた. DRAMの故障だと見抜くことは難しいことだと思うが,今回はROMではなくRAMが死んでいてくれただけで大変助かった.めでたし.

P.S. 同じような症状で死んだCat2960GをRAM交換で直そうとしていた人がいた...けど,この人は失敗していた.
Repair of a Cisco 2960G switch with amber LED via RAM chip replacement (FAIL/defect) - YouTube

References

Geekbuying でXiaomi Huami Amazfit Bip Lite を買ってみた話

Smart な Watch がほしかった.

smartなwatchというのもたくさんある.代表的なのはApple WatchとかApple WatchとかApple Watchとか.

私はPodCastを聴いていて特にしばしば聞くのがRebuild.fm である.
このPodCastの中で,smart watch の話題が出ていて,宮川さんが「Amazfit」というwatch を使ってみているというエピソードがあった.

私は時計はここ10年くらいずっとCASIOのG-SHOCKを使っていて,ソーラーパネルがついている充電式のwatchなので,電池交換をすることもなく10年間を過ごしてきた. だが最近は,twitter でsleep tracker がついたfitbitを代表としたfitness tracker的なものを使っているヒトがいて,私もsleep tracker的なものが欲しかった. だが単にsleep trackしてくれるだけじゃ面白くないから,通知とかも受けられるレベルのものが欲しいなぁと思っていた.私の欲しい機能はこの程度だったので,宮川さんの言っていたamazfitがちょうどいいんじゃないかと思って買ってみた.値段も手頃なので,そこまでこだわらないとか,smart watchを自分の生活の中で試してみるとかいう程度にはちょうどいいんじゃないかと思う.

初Geekbuying

今回はgeekbuyingを利用して購入してみた.私はこれを使うのは初めてだった. Aliexpressとかは使ったことがあったが,こいつは初めて. ということで購入して手に入れるまでをちょいと書いてみる.

何も考えずにAdd to cartをポチッとな.支払いはpaypalにしました. 香港から発送が近そうなので,shipping from HongKongにしました.

f:id:jp7fkf:20180814180344p:plain:w500
日本円で7882円.安い.shippingはfree.

f:id:jp7fkf:20180814180522p:plain:w500
私が発注した時は先ほどの金額よりちょっと安い7072円だった.

f:id:jp7fkf:20180814180629p:plain:w500
f:id:jp7fkf:20180814180648p:plain:w500

4月20日に発注して,shippingが記録されたのが,5月10日みたい. この辺りの遅さはありますが,許容しないとね.早く手に入れたいならそれなりのお金を払えばよい話である. Singaporeからは,4日程度で到着みたいです.早い.

到着しました.
f:id:jp7fkf:20180814180847j:plain:w500

思ったよりすんなり手続きできて,特に問題もなかったです.ggるとgeekbuyingは商品が届かないとかなんとか書いてあったりしますが,今回は何も問題ありませんでした. aliexpressとかで買い物したこともあるけど同じような感じだった.

使い心地はまた別記事で.

第36回電通大コンテストの結果

題のとおりです.
2017年に開催された第36回電通大コンテストの結果がかなり前に発表されておりました. 私は7MHz部門に参加し,113QSOという結果でした.

第36回電通大コンテストに参加した - JP7FKFの備忘録

結果は...

f:id:jp7fkf:20180518174611p:plain:w500

ちなみに2015年に開催された第34回電通大コンテストでは, 123QSO, 316pts, 33multiで総合得点10428ptsで7MHz部門で10位でした.

電通大コンテスト2015結果発表 - JP7FKFの備忘録

今回は113QSO, 299pts, 37multi, 総合得点11063ptsで同じく10位という結果でした.

以前と比べてQSO数は下がっているものの,multi,総合ptsは上昇しており,特に成長は感じられませんでした.
ただ,知り合いの局に関東でよく聞こえていたとの報告をいただいて嬉しい限りです.

1総通を取りたいと言い始めてからもう何年も経っていますが,いまだに取得できる目処は経っていません....
和文モールス難しい(一応修行はしているのですが...).

これからも精進したいところです.

=====第36回電通大コンテスト=====
Call:JP7FKF/7 (QTH:060101), 7MHz Only
LICENSE: H
QSO: 113
MULTI: 37
TOTAL SCORE: 11063
RANK: 10

SW4STM32で実数型をsprintfするときのtips

SW4STM32で実数型の値を出したくて,実数型のフォーマット指定子である%fをいれてみたらエラーが. なんでやねんって話である. これが組み込みプログラミングらしいところで,おそらく実数型のsprintfはコードサイズが増えるため,デフォルトでは利用しないようになっているのではないかと予想する.

エラー文は下記の通り.

The float formatting support (-u _printf_float) is not enabled from linker flags

検索したところ,下記のサイトに以下のような記述を見つけた.
PrintfのFloat出力: Crescent

結論から言うとプロジェクト内のプロパティから、
C/C++ Build」->[Settings]->
[Tool Settings]->[MCU GCC Linker]->[Miscellaneous]
でLinker flagsの
「-specs=nosys.specs -specs=nano.specs」
から
「-u printf_float」
を追加して
「-specs=nosys.specs -specs=nano.specs -u
printf_float」
にすることです。

なるほど.ということでこの通りに設定をいじる. f:id:jp7fkf:20180109000457p:plain:w500

するとめでたくコンパイルは通り,正しく実数型を扱うことができました.めでたし.

Reference

STM32マイコンでADCを使ってみる話

最近はPICよりかはSTM32を用いて電子な工作をしている. 基本的なペリフェラルとして,GPIO(論理出力/入力),ADC, PWM,Timer(割り込み),通信系(I2C,SPI,USART,I2S,CAN,USBなどなど)等がある.このうちでもセンシング等でよく利用されるのがADCであろう.秋月で簡単にチップが入手できるSTM32F042には,12bitというわりと分解能の高いADCが付いている.PICでは8bitや10bitが多い中,12bitもの分解能が得られるADCはありがたいものだ.

今回はこのSTM32のADCを利用する方法を簡単にまとめてみようと思う. 主に下記の記事を参考にさせていただいた.

STM32の少しややこしいところは,PICのようにチャネルを設定しADCをGOしてフラグが落ちるまで(ADC完了まで)待ち,データを取る.というシーケンスでチャネルを次々変えて変換すれば異なるチャンネルのADCができるというわけではないという点である.特に注意するべきがこの複数チャンネルのADCであり,これはDMAを使ってやるとかなり簡単に処理することができる.STM32でADCを利用するときはDMAの利用は必須と言えそうだ.

複数チャネルのADCについては,上記の記事でかなり詳細に紹介されているので,ここは自分が忘れない程度にざっくりと記載していく.参考にするのであれば上記の記事を参考にすることをお勧めする.

DMAを用いたADC

まずはSTM32CubeMXでペリフェラルの設定をする. ADCしたいピンをADCモードに設定する.GUIなので簡単である. f:id:jp7fkf:20180108234233p:plain:w500

さらにconfigurationタブから,ADCのconfigは下記のようにしておく.

  • Continuous Conversion Mode: Enable
  • DMA Continuous Requests: Enable
  • Overrun behaviour: Overrun data overwritten

f:id:jp7fkf:20180108233837p:plain:w500

さらにDMAのconfigをいじっておく.ADCからのDMAリクエストを追加して

  • Mode: Circular
  • Increment Address: Memory
  • Data width: half word

f:id:jp7fkf:20180108233855p:plain:w500
ここまでできたらCubeMXを用いた設定は終了なので,コードを生成する.

ここからはSW4STM32でコードを書いて行く. 追加するべきは,初期化や変数宣言をするあたりに下記のコードを追加するだけである.

enum{ ADC_BUFFER_LENGTH = 2 };
uint16_t g_ADCBuffer[ADC_BUFFER_LENGTH];

memset(g_ADCBuffer, 0, sizeof(g_ADCBuffer));
HAL_ADC_Start_DMA(&hadc, g_ADCBuffer, ADC_BUFFER_LENGTH);

これで,任意の場所でg_ADCBufferの中身をみてやれば各chのADC値が読み取れる.ch1とch2を使っているのであればg_ADCBuffer[0]にch1が,g_ADCBuffer[1]にch2のADC値が入っている.
ADCを複数チャネルで利用する場合であっても,チャネルの若番から順に配列に格納されていく.ch1とch3のみを有効化した場合でもg_ADCBuffer[0]にch1, g_ADCBuffer[1]にch3の結果が入る.

というわけで,これだけでDMAを使ってADC値を得ることができる.ADCするためにCPUを使う必要もないし,いい感じである.CPUのリソースを有効に使える感じがする.これからもSTM32の勉強を進めて色々なモノづくりを進めてみようと思う.

References

ACS758を使ってカジュアルに電流計を作った話

電流を測りたくなったのでわりとカジュアルに電流計を作ってみた. 電流を測定するにあたって,使ったのはAllegroのACS758というもので,このうちの,ECB-200Bというモデルのホール効果を利用した電流センサを利用した. こいつは±200Aの電流を測定することができるというわりとスゴい代物.

こいつから10mV/Aの傾きでほぼリニアに測定値を得ることができる. こいつの出力電圧をADコンバータで受け,PICを使ってLCDに表示することにした.

ADコンバータはなるべく分解能の高いものを使いたい.ここで下記のような16bitでI2CなADCを用いてカジュアルに済ませることにした. こいつの特に便利なところは,差動入力が可能なところと,基準電圧内蔵なところである. ECB-200Bは,正負の電流が測定できるのだが,出力電圧にはバイアスがかかっており,そこから上下に電圧が動くことで正負電流を表現している. この動きの測定にADCの差動入力を大いに利用し,負側にECB-200Bの0点電位を与えることで,差動的に見て負の電圧(絶対的に/GND基準では正の電圧である)も上手にADC出力として表すことができ,余計なこと(バイアスを与えたり,ADC後に0点を考慮して値をオフセットしたり)をせずに簡単に出力値を得ることができるのだ.0点調整もボリュームをつけてやることで現場で0点調整を行うことができて,多少静磁場があるところでも0点を調整して測定ができる. MCP3425(16Bit ADC I2C 基準電圧内蔵)搭載モジュール

リファレンス電源内蔵で,I2Cで測定値を得ることができる代物である. これなら普通の8bitADCしか備えていない安物PICをMCUとして用いることができる.

さらにLCDには,これまたI2Cなキャラクタ液晶モジュールを用いる. 電流値を表示するだけなので8x2行で十分である.

I2C接続小型キャラクタLCDモジュール 8x2行

この2つのI2CなデバイスをPICのI2Cポートにバス接続させて動かすことにする.これならGPIOが少ないMCUが利用できる.

f:id:jp7fkf:20180108201338j:plain:w600
(写真は誤って制作中に液晶を割ってしまったときのもの....このあと新しいのに変えました.こいつは割れやすいので気をつけないといけない.)

I2Cで値をとって表示するだけなのでPICのお仕事はほとんどない. なので安物の8pinPICであるPIC12F1822を用いる.

こいつのI2CバスにADCのICと液晶のI2Cラインをぶら下げる.

あとはADCの測定値を整形して出すだけ. 簡単だ.

ケースはタカチの単四x2の電池ボックスがついたものを使った.液晶用の穴と,陸軍端子,スイッチ用の穴を開ける. 陸軍端子と電流センサはできるだけ太い配線で結ぶ.銅板を曲げたりしても良いと思う.

電源電圧は5Vで動かしているので,単4x2だと足りない.なのでステップアップコンバータで簡単に5Vに昇圧する.こいつはカジュアルに昇圧したいときに本当に便利である.何も考えなくてもきちんと電圧を吐いてくれる.ただし電流は200mAまでなのでそこそこ電流を食わせるときには多少の注意は必要である.

PFMステップアップDC/DCコンバーター HT7750A(5個入)

f:id:jp7fkf:20180108201407j:plain:w600

つーわけで,±200Aまで測れる電流計ができた. SANWAのそれなりのテスタで確度をざっくりみてみたけど,いい感じの値を出してくれている. ただし,ホール効果を用いている以上,周りに磁石等があるばあいは値が狂ってくる.強力な磁石を近づけると数十Aオーダーで誤差が出る.一定磁場の中ではキャリブレーション(0点調整)をすればよいが,磁場が変化する場合はこいつでは正確な測定ができないので注意をする必要がある.

なんにせよ,それなりの大きな電流がそれなりの精度で測定できる電流計を作ることができた.電池駆動なので持ち運びもできて小型に収められたので使い勝手が良い.めでたし.

References

MBPにSDカードを挿してストレージ問題を解消する話

わたしのMacBookProはMid2014な13inch retinaなやつ. もうしばらく使ってる.

私はメインPCをデータの倉庫にしてあり,そいつが最新になるように管理している. ラップトップにはそのメインPCからデータをコピーして持ち歩いている. コピーはバックアップを取る時にやるようにしてあり,メインPCで変更されたデータは,バックアップの時にラップトップにコピーされて更新される.それまでは前のデータがラップトップに入っていることになる.どうしても最新のデータが欲しい時はリモートデスクトップやらVPNやらでメインPCにアクセスしてデータを吸い出している.

基本的にデータを作ることよりも参照することの方が多いので,この方式を採用している. するとだんだんデータ量は増えて,ついに256GBなMBPのストレージを圧迫するようになってきた.

メインPCのデータを全てコピーしているわけではなく,持ち歩きたいデータを選別してコピーしているが,そのような状況だった.

macSSDを換装することも考えたが,このモデルはなかなか厳しいようである. 他にはUSB-HDDを持ち歩く方法であったり,小さいタイプのUSBメモリをさしっぱなしにしてストレージとして利用する方法などが考えられたが,私はSDカードのユニットが空いているのが気になって,そこを埋めようかと考えた.USBポートを使いたくないということもある.ただでさえ2ポートしかないのにUSBメモリさしっぱなしにすると1ポートしか使えなくて大変不便だ.

SDカードスロットに差し込むタイプのストレージとして販売されている,TrancendのJet Drive Liteなんてものもあるのだが,なんせこれが高価である.128GBで12000円ほど. 探してみると,SDカードスロットから頭が飛び出ないタイプのmicroSD->SD変換があるらしく,こいつにmicroSDを差し込んで使うことでそれなりに安価にできるのではないかという結論に至った.

ということでコイツらを買ってみた. iSlice Pro 13" MacBook Pro 13インチ Retinaディスプレイモデル (Late2012, Early2013, Mid2014, Early2015) 専用 microSDカードアダプター シルバー EAD-303ASV
Samsung microSDXCカード 128GB EVO Plus Class10 UHS-I U3対応 (最大読出速度100MB/s:最大書込速度90MB/s) Nintendo Switch 動作確認済 MB-MC128GA/ECO

f:id:jp7fkf:20171216154554j:plain:w600
f:id:jp7fkf:20171216154621j:plain:w600
f:id:jp7fkf:20171216154636j:plain:w600

値段は...JetDriveLiteと比べて大して変わらないかも...と思う.でも少し安い.さらに,microSDの容量を変えたく鳴った時に気軽に変えることができるし,もしこのmacを使わなくなったとしてもデジタルカメラ等でmicroSDを継続して利用できるメリットもある.なかなか良いと思う.

ということで,ストレージが圧迫することもなくなり,ストレージのことを気にして使う必要も無くなってすこぶる快適.まだこのMBPに頑張ってもらおうと思う.私はこのマシンに愛着があるし使いやすくて好きであるから.