STM32G0使ってみる4 -1wireデバイスをいろいろ使ってみる-

さて、珍しく飽きずに続いているSTM32G0シリーズですが今回は1wireデバイスを
使っていこうと思います。前々回の回路図より1wire用にGPIOポートを一つ開けており、
こいつをフルに活用します。


●DS18B20

金属ケースに入って見えませんが1wireデバイスの代名詞というべきデジタル温度
センサDS18B20です。いろんなマイコンで数多くの作例があり大人気のICです。

基本はVcc,Data,Gndの3線式ですが、ストロングプルアップを行いData線の電力だけで
動かす2線式の動作方式もあります。今回はお手軽に3線式で動かしていきます。


私のSTM32G0のプロジェクトではすでに動作するようになっております。
DS18X20の#defineを有効にしてください。


動かし方はネット上に大量に作例がありますのでそちらに任せるとしてとりあえず
動作させたところです。今回は一つしかつけていませんがDS18B20はROM内に固有IDが
あり、同一のバス上に複数のDS18B20を接続することができます。


さて動作時のデータの波形を記録してみました。
固有IDを指定して温度を取得しているところです。
Picoscope5444DはDS18x20用のプロトコルアナライザ機能があり、どのような状態かが
一目でわかるので大変便利です!そうだね宣伝だね。



●Aosung製のDHT系の温湿度センサたち


DHT11から始まり今ではAHT20(これはI2C)まで進化しているAosung系の温湿度センサ
モジュールが今回はその中でAM2303とAM2322を紹介します。


AM2303はDHT11よりも値段は高いですが性能が良い1-wireのモジュールです。
DS18B20とは互換性はなく独自のプロトコルでデータのやり取りを行います。


AM2322BはAM2303が一まわり小さくなったAM2322にプラスティックのケースで覆われ、
機器に取り付けてすぐに使用可能なモジュールとなっています。
こちらはI2CとDHT系の1wireと2通りのインターフェースを選ぶことができます。
SCLをGNDに落とした状態で電源を投入すると1wireモードになります。
動かし方についてはAM2303と同一になりますがI2cモードで動かすと逆に煩雑になって
しまうので1wireモードのほうがめっぽう使いやすいです。



てわけでサクッと動かしてみました。ちゃんと検証はしていませんが温度や湿度の
精度もそこそこありそうで実用に足りると思います。

…が…


●AM2322の通信間隔の注意

↑SamplingPeriodが最小2Secだから2秒ごとにアクセスできる!と思い込み2秒ごとに
AM2322と通信して温湿度表示とかやると突然得られるデータがめちゃくちゃになり
しまいには何やってもデータを返さずへそを曲げで黙り込んでしまいます!!!!

AM2303ではこの変な現象にならないのでAM2322(AM2322Bも)固有の特性だと思います。
RockSolidHead Oyaji様の"AM2322を使ってみた その3 "の記事にて私が遭遇したものと
酷似した現象に遭遇しております。I2Cで動作させても同じ感じですね。

先のブログの方はI2Cで動作させており、AM2322がへそ曲げたらAM2322の電源を一旦
落とす荒業で対応しております。ねむいさんは何秒間隔開けたらへそ曲げないか検証
してみました。

条件
 ・電源は+3.3V
 ・2秒から0.5秒刻みで間隔を広げていきへそ曲げないところを見つけます。
 
結果
 2.0Sec :即死
 2.5Sec :即死
 3.0Sec :即死
 3.5Sec :3分ほどおいてたら死んだ。1時間以上大丈夫なこともあり不安定。
 4.0Sec :1週間連続通電動作させても問題なし。
 4.5Sec :1週間連続通電動作させても問題なし。
 5.0Sec :1週間連続通電動作させても問題なし。

う〜〜んたぶん個体差のばらつきがあるから5Sec以上間隔開けるようにしましょ


ちなみにAM2322のセンサ素子そのものの反応時間は結構遅いです。

湿度は8Secあります。

温度に至っては最大30Secですって!
5Sec間隔どころか1分でもいいんじゃないかしら…

ちなみにt63%というのは1-exp(-t/τ)で示される一次遅れのシステムにおいて
tのタイミングで0->1のステップ入力を加えたときにtがτの時 1-exp(-1)≒0.6321...
話を戻すとこのセンサでは時定数τは温湿度変化が起こった時変化量の63.2%に
達する時間という意味となります。

すみませんこういう重要なこと今までちゃんと見ないまま動作させていましたが、
このt63%が小さいほど反応性がよいセンサということになりますね。これからは
新手のセンサが現れたら精度や確度だけでなく反応性にも焦点を向けてみます!


中国自然歩道を往く -吉備高原を貫通せよ!(ついでにMT3333の新ファームを試す)-

秋も深まり気温も下がったので中国自然歩道のロングトレイルにちゃれんぢしてみました。
今回は2013年より長らく使用しているGms-G9のファームを最新にしてなおかつ設定を
若干変更しておりそれの実地検証も兼ねております。

●2021.11.13 中国自然歩道(福渡〜有漢市場)


高速バスで大都市岡山へ…!
私は岡山駅って周りに田んぼしかないのかとか思ってましたがめっちゃ栄えてました
岡山の人すみません。



この日の夜は岡山に泊まって現地を早朝から出発します。
夕食がてらしばし夜の岡山周辺を散策しましたが見ようと思ってた岡山城は
コロナ禍で人が減ったのを蹶起に大改修中でした。



虹裏メイドの朝は早い…
前回の続き、朝の福渡駅から61kmの冒険のはぢまりです!




旭川を超えて北に向かいます。
南に行くとたけべ八幡温泉郷があります。



時折見える紅葉がきれいな国道484号をゆっくり上っていきます。



中国自然歩道は舗装路中心ですがとにかく距離が長い!
紅葉の道をずーっと走っていると岡山市と吉備中央町の境にきました。
そしてここからが本番です!



はぁはぁ…この時点で13km…道の駅円城なる場所に到着しました。
吉備中央らしくきび団子が売られていました。



さっきの道の駅の起源となった円城寺です。



ちょっと寄り道(ちょっとという距離ではないですが)して
いわくら公園と岩倉山です。吉備高原を見渡せられます。


やぎ


11月も半ばで気温もぐっと下がってますが日中は太陽さんのおかげでぽかぽかです。


道中にはたくさんの寺社があり、都度お参りしていきます。


突然現れる魔法宮なる説明看板。
動揺し写真もぶれる。


ススキも冴えますね〜




道は細い山道へと変わりそして25kmまで来て初めてトレイル区画になります。
この先にある総社宮のお札が見られました。




総社宮です。
…ここでようやく27.5km…残り21km(の予定だったが…)


有漢市場です。
自販機があったのでここでようやく大休憩です。
この先は690mの山を越える道となります!!



集落の濃度魚をゆっくり上がっていくと天福寺と大平山に上る道に
つきあたります…


っていうかまたやぎさんがいた…



道はぐんぐん高度を上げて進んでいきます。
舗装路と良い景色のおかげかあまり苦にはなりません。





天福寺です。
ここも紅葉がとても奇麗ですね〜


次は大平山山頂へ向かいます!山頂まですべて舗装路で親切設計♨




大平山山頂です。
最高の景色ですね〜




くだりも舗装路です。
かたいアスファルトの下りは逆に足に大きな負担がかかるので慎重に駆け下ります。



有漢区域に降りてきました。
まっすぐ行ったらあっさりゴールですがそうは問屋が卸さず超大回りしやがります。


商店の傍らにねこさん。
こちらの商店の飼い猫さんだそうで日向ぼっこしています。




そして突然高度を上げるルートに…
最後の最後でこれはきつい…が景色は常に最高です☆



そして本日二回目にして最後のトレイル区間に入ります!!!
と思ったらあっさり墓地にでてきました!!なんやそれ!


ぁ〜ここも紅葉がすっごくきれいです♥


ようやくゴール付近まで降りてきました。



宝妙寺です。
そろそろ日が落ちてきますね。



鷹峯神社にお参りしてから有漢市場バス停に到着です…
50.5劼離丱肇襪ぶじおわりました…!


…と言いたいところですが、次のバスが来るのは17:15くらい、到着時は
まだ15:40くらい…ということで南下してバス代を浮かせる作戦と急遽実行
しました!!!


下市バス停付近。中国自然歩道の次のルートを示す看板がありますがこの地点で
中国自然歩道とはお別れします。


33-4



似たような道を延々と南下していくとようやくコンビニが…!
コンビニから少し進んだ先にある出口バス停というところでいい時間と
なりましたのでここでゴールとしてバスを迎えました。


備中高梁駅なるところから大都市岡山に戻りますが…
これ1時間以上かかって結構きつかったです…次の前線基地はここからかな。


そして家族のお土産(頼まれてた)とがむばったねむいさんのご褒美の日本酒も
大量に購入してのぞみで京都に帰ります…帰りはくそ早いですさすが新幹線。



というところで交通の便が全くと言っていいほどなく長距離を一気に駆け抜ける
パワープレイを毎回強いられる中国自然歩道ですが舗装路の比率が非常に高く、
その面では結構助かってます…この先も交通の便が壊滅状態なのでしっかりと
戦略を立てて攻略していこうと思います!!



●2021.11.13 中国自然歩道(福渡〜有漢市場)GPSログ

Gms-G9の設定を変えたおかげか建物に入ると位置がすっ飛ぶのは発生するものの
位置がずれっぱなしになったり長時間再補足しなくなる現象は発生しなくなってます。
注:捕捉精度悪化による位置すっとびはGPSモジュールの特性上どうしても
  起こってしまうのでこれについてはデータを扱う際に工夫するべきです



帰宅して軌跡を確認して気づいたのですが…

あああああああ!!!
あと1.5kmくらいでJRの駅だった〜〜〜!!!
まぁバス代は確かに浮いたからよいでしょう…



ところで一番最初に述べた今は亡きGtop社のGms-G9のファームの話ですが、かつての
Gtopの開発チームが新たにCDTopという会社を立ち上げ、MT3333を使ったモジュールを
作っておりました。SierraWirelessとの関係はよくわかりませんが兎にも角にも
Gms-G9に機能的に近いCD-PA1616用のAXN5.1.6のファームがmirificaのサイトから
ダウンロードでき、これがGms-G9にも使用できます(AXN5.1.6_0024ってやつです)。

基本的にな部分は5.1.1のころと変わらないのでもっと古い3.x.xとかのバージョンから
アップデートする際は私のブログを熟読して各自対応してください。
そしてお約束ですがファームウエアアップデートの際は自己責任でお願いします。



次にモジュールの設定ですが過去に中国自然歩道を進んでいると気になってたのですが
電波の入りにくい場所から開けた場所に出ても位置が大きくずれっぱなしになったり
開いた場所に出ても補足をしない現象がたびたび発生し困っておりましたが上記二つの
設定を変えて対処しております。詳細は下記に。

PMTK_SET_TUNNEL_SCENARIO はPMTK257で1で精度優先、0で補足優先となります。
精度優先にするとトンネルに入ったときに補足が外れ位置があちこちにすっ飛ぶ現象が
なくなり軌跡がきれいになるらしいのはよいのですが(次の位置を推定している?)
その後開けた場所に出てもずれっぱなしにつながることとなりねむいさんの使い方では
不適切であるとわかりました。

PMTK_SET_AIC_MODE はPMTK286で1で有効、0で無効となります。
有効にすると外来電波の干渉をキャンセルする代わりに感度が下がり補足衛星数の
低下につながってしまうこととなり、ねむいさんみたいな電磁波があまり飛んでない
トレランで使用する場合では不適切だとわかりました。

これらはファーム変更前にみっちり検証していましたが両者を"1->0"にしたら大きく
ずれっぱなし現象とか開いた場所に出ても長時間捕捉しない現象が発生しなくなったので
これからはこれらの設定で行こうと思います。

GitHubのソースももっと確証が取れたら変更しますのでよろしくお願いします。

STM32G0を使ってみる3 -I2Cライブラリの拡張そしてAHT20-

●AHT20だ!
今回は前回ご紹介したAOSUNGの温湿度センサAHT20を動作させてみます。



AHT20はAOSUNG(ブランド名はASAIR)の新世代の温湿度センサです。これを搭載し、
さらにLDOと信号レベル変換FETを搭載したモジュールをアマゾン経由で入手しました。

そしてつい最近秋月よりDIPモジュール版のAHT25も登場してもう入手されて方もいる
かと思いますが過去世代のAM23xx系よりもさらに使いやすくなっているようですね。


●I2Cドライバを10年ぶりくらいに改造する
さて、私が過去に作成したI2Cライブラリは送信受信ともバイトorワード単位でしか
やり取りすることができず、2バイトコマンドが存在するI2Cデバイスのコントロール
すらできないガバガバっぷりです☠(RaspiのSMBusも同じだし私は悪くなi)

そしてAHT20は温度取得トリガーコマンドが2バイトどころか3バイトもあった…

そんなわけで重い腰を上げてSTM32G0のI2Cレジスタをたたいてマルチバイトを送受信
できる関数を整備してみました。
※受信※

/**************************************************************************/
/*!
Read RAW MultiByteData Middlelevel.
*/
/**************************************************************************/
uint8_t I2CDev_ReadBytesRaw(uint8_t sla,uint8_t *data,uint8_t count)
{
/* Wait Bus Busy */
I2CDevTimer = I2CDEV_SHORT_TIMEOUT;
while((I2CDEV_PORT->ISR & I2C_ISR_BUSY))
{
if((I2CDevTimer--) == 0) return I2CDev_Timeout();
}

/* Send Slave Address and Memory Address */
/* Configure slave address, nbytes, NOLELOAD,NOAUTOSTOP */
I2C_TransferHandling(I2CDEV_PORT, sla|I2CDEV_SD_READ, count, 0, (uint32_t)(I2C_CR2_START | I2C_CR2_RD_WRN));

for(int i = 0;i<(count-1);i++){
*data = I2CDev_RecvData(I2CDEV_ACK);
data++;
}
*data = I2CDev_RecvData(I2CDEV_NACK); /* Last data MUST be NACK */

/* Send Stop Condition */
I2CDev_StopCondition();

/* Wait until STOPF flag is reset */
I2CDevTimer = I2CDEV_SHORT_TIMEOUT;
while(!(I2CDEV_PORT->ISR & I2C_FLAG_STOPF))
{
if(I2CDev_ReadNAck() ==I2CDEV_NACK) return I2CDev_Timeout();
if((I2CDevTimer--) == 0) return I2CDev_Timeout();
}

/* Clear STOP Flag */
I2CDEV_PORT->ICR =I2C_ISR_STOPF;

/* Clear Configuration Register 2 */
I2CDEV_PORT->CR2 &= (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_HEAD10R | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_RD_WRN));

return 1;
}


※送信※
/**************************************************************************/
/*!
Write RAW MultiBytes Middlelevel.
*/
/**************************************************************************/
uint8_t I2CDev_WriteBytesRaw(uint8_t sla,uint8_t *data,uint8_t count)
{
/* Wait Bus Busy */
I2CDevTimer = I2CDEV_SHORT_TIMEOUT;
while((I2CDEV_PORT->ISR & I2C_ISR_BUSY))
{
if((I2CDevTimer--) == 0) return I2CDev_Timeout();
}

/* Send Slave Address and Memory Address */
/* Configure slave address, nbytes, RELOAD,AUTOSTOP,AUTOSTART */
I2C_TransferHandling(I2CDEV_PORT, sla|I2CDEV_SD_WRITE, count, I2C_CR2_AUTOEND|I2C_CR2_RELOAD, I2C_CR2_START);

/* Send multibytes datas */
for(int i = 0;i /* Wait until TXIS flag is set */
I2CDevTimer = I2CDEV_SHORT_TIMEOUT;
while(!(I2CDEV_PORT->ISR & I2C_ISR_TXIS))
{
if(I2CDev_ReadNAck() == I2CDEV_NACK){
/* Clear STOP Flag */
I2CDEV_PORT->ICR =I2C_ISR_NACKF;
/* Clear STOP Flag */
I2CDEV_PORT->ICR =I2C_ISR_STOPF;
/* Clear TXE Flag */
I2CDEV_PORT->ISR |=I2C_ISR_TXE;

/* Clear Configuration Register 2 */
I2CDEV_PORT->CR2 &= (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_HEAD10R | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_RD_WRN));

return 0;
}

if((I2CDevTimer--) == 0) return I2CDev_Timeout();
}
I2CDev_SendData(*data);
data++;
//I2C_WaitFlag(I2C_ISR_TCR); /* Notneeded in auto STOP */
}

/* Send Stop Condition */
//I2CDev_StopCondition(); /* Notneeded in auto STOP */

/* Wait until STOPF flag is reset */
I2CDevTimer = I2CDEV_SHORT_TIMEOUT;
while(!(I2CDEV_PORT->ISR & I2C_FLAG_STOPF))
{
if(I2CDev_ReadNAck() ==I2CDEV_NACK) return I2CDev_Timeout();
if((I2CDevTimer--) == 0) return I2CDev_Timeout();
}

/* Clear STOP Flag */
I2CDEV_PORT->ICR |=I2C_ISR_STOPF;

/* Clear Configuration Register 2 */
I2CDEV_PORT->CR2 &= (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_HEAD10R | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_RD_WRN));

return 1;
}

STM32F0以降のI2Cブロックはハードウエアで細かい設定ができる分ちゃんと仕組みを
知っておかないとうまく使いこなせないのでご注意を…!


とりあえずサクッと動きました☆
値段も安くて精度もそこそこなので使い倒せるセンサですね〜


次はオシロで波形を観測してみます。
温湿度測定トリガコマンド送信時の波形は以下のようになります。

温度/湿度の受信パケットは以下の波形です。

画像の説明にもある通りCRCチェックが必要なければ6バイトで受信を打ち切って
しまうこともできます。私のプログラムはまだCRCチェックに対応してないので
6バイトめで打ち切りにしています。すみません後でCRC実装します。




といううわけで10年越しでやっとこI2Cライブラリに拡張性持たせた改造を行うことが
できました。これを応用して買いためたまんまのほかの温湿度センサもガンガン使って
行こうと思います!!!
今回の内容を盛り込んだSTM32G0のプログラムも更新しましたのでよろしく!!!



次のネタですが実はもうソースコード見たら実装済みでわかるかと思いますが1Wireな
デバイスたちをオシロの波形と照らし合わせながら動かしてみます。

STM32G0を使ってみる2 -I2Cを使ってみるていうかそれぐらいしか思いつかない-

本年度も後半に入ってしまいましたが今年最初に紹介したSTM32G0をもうちょっと使って
見ようと思います。



さて…本来はこのような構成でI2Cデバイスを使う予定でしたが…
残念ながらリマップの関係上かなり難しいことが判明…オプションバイトを弄らず
自由に使えるのはたったの3ポートのみ!


しかもSTM32G031-Discovery互換ではI2CのSDAで使うPA12(6Pin)がLEDに取られて
しまっているのでお辛い…


そんなわけで折半でこのような回路構成にしてみました。LEDとI2CのSDA干渉させない
ようにわざわざ高速バッファを挟む本末転倒…だがそれがいい
SWCLK,SWDIO,nResetはいつでも使えるようしておきました。先人の方々もI2C専用で
動かすことを前提でこれ使ってる感じですね。

それとあまったPC14(1Pin)は1wireでもぶら下げるとしますか…



ピンの選定については今回は下記の方の記事を参考にしました。
ありがとうございます。

Crescent様
http://meerstern.seesaa.net/article/477348927.html
システム関連ピンのGPIO化に際する注意を詳しく解説されています。

caa45040様
https://qiita.com/caa45040/items/a6ca28ae4b1dfa5c489c
オプションバイトをいじりリスクを負ってたくさん製作されておられます


ねむいさんもS-5851A持っているのでせっかくだからまねさせてもらいます
液晶はもちろんドットマトリクスな中華I2C液晶です!
ROMが32Kbyteあるのでfontx2でankフォントくらいは表示できますね!
液晶については過去記事のこちらをご参照ください。
一時期aitendoで売ってたので持ってる方はまだいるかも!?




特にリマップとかは行わず、パワーオンリセット後のGPIOポートをそのまま
使用するので5PinがI2C2のSCL,6PinがI2C2のSDAとします。


また、S-5851AのアドレスはAD1=1,AD0=0として0x94(7ビットアドレスだと0x4A)に。



あとはSTM32F03のプロジェクトからI2Cライブラリをサクっと移植し動作完了☆
すごいやっけつ感ですがあっけなくできてしまいました。さすが私

STM32G0のI2C周りはSTM32F3やF0系とほぼ同じレジスタ構成なのでややこしい
タイミングレジスタの設定値もタイミング値計算機で算出可能です。



STM32のHSIは16MHz,そこからSysClockの64MHzにします。
この設定で100kHzのI2Cクロックを生成する数値を代入します。


オシロスコープで実際の波形をキャプチャしたところです。きっかり100kHzは
出ませんがまぁだいたい近いですね。画像はSTTS751との通信(I2Cアドレス0x72、
7ビットアドレスでは0x39)です。こんな感じでI2Cの解析にPicoscope大活躍ですわ
そうだね宣伝だね。



そんなわけで重い腰を上げでSTM32G0の続きやってみましたがあとから来た人に
どんどん先を越されてしまいましたがいつもの感じでやっていこうと思います。

そして…小さな巨人STM32G0で次動かすデバイスは…


こいつだ!
つづく!


おっとーその前に久々の新規プロジェクトになりますがこちらにアップロードして
おりますので自己責任でどうぞ。

いろいろ試す49

●OpenOCDでマルチコアデバッグするやり方
竹本様よりコメントでお題をいただいたのでトリプルコア搭載のLPC4370ボード、
LPC-Link2を使って実践してみました。


まずねむいさんのOpenOCDバイナリの/tcl/targetlpc4370_lpclink2_spifi.cfgを
編集します。デフォルトはm4コアしか有効にしていませんがm0subを有効にします。
,鉢△良分が編集した部分です。
m0appは電源投入直後は寝ているので今回は省きます。
なお順番が重要でm4コアを必ず先頭に持ってきておきましょう。


まずOpenOCDを起動したらm4コアにアタッチします。insightでつなぎます。
insightではTCPポート3333のm4コアがつながります。

openocd -s C:/Devz/ARM/OCD/tcl -f interface/ftdi/jtagkey2.cfg -f target/lpc4370_lpclink2_spifi.cfg -c "reset halt" -c"arm semihosting enable"
C:/Devz/ARM/insight/bin/arm-none-eabi-insight --eval-command="target remote localhost:3333" --eval-command="tbreak main" --nx main.elf
Open On-Chip Debugger 0.11.0+dev-00365-g9a9e9e2c6 (2021-08-31-11:31)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "jtag". To override use 'transport select '.
Info : clock speed 2000 kHz
Info : JTAG tap: lpc4370.m4 tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4370.m0_APP tap/device found: 0x0ba01477 (mfg: 0x23b (ARM Ltd), part: 0xba01, ver: 0x0)
Info : JTAG tap: lpc4370.m0_SUB tap/device found: 0x0ba01477 (mfg: 0x23b (ARM Ltd), part: 0xba01, ver: 0x0)
Info : lpc4370.m4: hardware has 6 breakpoints, 4 watchpoints
Info : lpc4370.m0_SUB: hardware has 2 breakpoints, 1 watchpoints
Info : starting gdb server for lpc4370.m4 on 3333
Info : Listening on port 3333 for gdb connections
Info : starting gdb server for lpc4370.m0_SUB on 3334
Info : Listening on port 3334 for gdb connections
Info : JTAG tap: lpc4370.m4 tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4370.m0_APP tap/device found: 0x0ba01477 (mfg: 0x23b (ARM Ltd), part: 0xba01, ver: 0x0)
Info : JTAG tap: lpc4370.m0_SUB tap/device found: 0x0ba01477 (mfg: 0x23b (ARM Ltd), part: 0xba01, ver: 0x0)
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
Warn : VECTRESET is not supported on this Cortex-M core, using SYSRESETREQ instead.
Warn : Set 'cortex_m reset_config sysresetreq'.
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
target halted due to debug-request, current mode: Thread
xPSR: 0xc0000000 pc: 0x555d36cc msp: 0x675f04e0
Info : JTAG tap: lpc4370.m4 tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4370.m0_APP tap/device found: 0x0ba01477 (mfg: 0x23b (ARM Ltd), part: 0xba01, ver: 0x0)
Info : JTAG tap: lpc4370.m0_SUB tap/device found: 0x0ba01477 (mfg: 0x23b (ARM Ltd), part: 0xba01, ver: 0x0)
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
Warn : VECTRESET is not supported on this Cortex-M core, using SYSRESETREQ instead.
Warn : Set 'cortex_m reset_config sysresetreq'.
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
target halted due to debug-request, current mode: Thread
xPSR: 0xc0000000 pc: 0x555d36cc msp: 0x675f04e0
semihosting is enabled

Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : accepting 'gdb' connection on tcp/3333
Info : JTAG tap: lpc4370.m4 tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x4)
Info : JTAG tap: lpc4370.m0_APP tap/device found: 0x0ba01477 (mfg: 0x23b (ARM Ltd), part: 0xba01, ver: 0x0)
Info : JTAG tap: lpc4370.m0_SUB tap/device found: 0x0ba01477 (mfg: 0x23b (ARM Ltd), part: 0xba01, ver: 0x0)
Warn : Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
Warn : VECTRESET is not supported on this Cortex-M core, using SYSRESETREQ instead.
Warn : Set 'cortex_m reset_config sysresetreq'.
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
target halted due to debug-request, current mode: Thread
xPSR: 0xc0000000 pc: 0x555d36cc msp: 0x675f04e0, semihosting
Info : Found flash device 'win w25q80bv' (ID 0x001440ef)
Info : New GDB Connection: 1, Target lpc4370.m4, state: halted
Warn : Prefer GDB command "target extended-remote :3333" instead of "target remote :3333"
Error: JTAG-DP STICKY ERROR
Error: Failed to read memory at 0xfffff000

接続時のログになりますがTCPポート3333に加えてインクリメントされた値の3334が追加
されます。この3334がm0subのコア用のポートとなります。

お次はgdbを別口で起動します。 target extended-remote localhost:3334とします。


m0用のプログラム走らせてないのでsticky-errorは出てますがm0コアには
しっかりアタッチできております!

こんな感じでマルチコア当たり前になった昨今ですがOpenOCDを駆使してバンバン
デバッグしていきましょう!


●KYF39でSBIネット銀行のアプリ"スマート認証NEO"をインストールする
ねむいさんは元来よりSBIネット銀行を利用しております。
利用状況に応じて振込手数料が無料になる回数が増えるスマートプログラムなるものが
あるのですが今年の4月に大改悪しやがりましてスマホでSBIのアプリを入れてスマート
認証NEO
なるものを導入しないと自動的に最低ランクになってしまう事態となりました!!

まぁ素直にスマホにインストールすればと思いでしょうが、ねむいさんが持っている通信
端末KYF39は旧世代の人間向けのガラホでこれは普通の方法ではSBIアプリをインストール
できません!!FUCK!!

というわけでこいつに無理やりSBIアプリをインストールしてスマート認証NEOを設定する
方法を紹介します。windows10環境下で行います。
ここから先は自己責任でお願いします!
(注:私も手探りで行いましたので内容は適宜増強していきます)

1.APKをダウンロードする
まずはAPKをダウンロードしないと話になりません。
KYF39はgoogleplayが使えないのでapkcomboというサイトからapkをダウンロードします。
https://apkcombo.com/ja/zhu-xinsbinetto-yin-xing/jp.co.netbk/

それとSMS認証突破するためにSMSforwarderが必要なのでこれも落とします。
https://apkcombo.com/ja/sms-forwarder-auto-forward-sms-to-pc-or-phone/enstone.smsfw.app/

2.APKインストールまで
すみません超手抜きですがとりあえずこちらの方のわかりやすい手順に倣います
KYF35をお使いですがandroidなのでやってることは一緒です。

SBIアプリとSMSforwarderのインストール順は特に気にしなくてもよいですが
設定は必ずSMSforwarderから行います。

3.SMSforwarderの設定を先に行う
SMS認証のメッセージを自分のPCのメールアドレスから出すようにフォワードさせます。
メールの送付先は送信に使ったメールアドレスにしておきましょう。

なんでこんなめんどくさいことするかというとKYF39デフォルトの+messgaeで見ようとするとなんと今までやったSBIスマート認証NEOの設定がキャンセルされたことに
なってしまい、先に進めなくなるからです!!!!

4.SBIスマート認証の設定を行う
ログイン名とパスワード、認証用PINコードの設定を行います。
SMSforwarderがちゃんと機能していればPCのメールアドレスにsms認証の内容が
来ますのでそれを打ち込み認証完了です!!!



SBIの管理画面からもちゃんとスマート認証NEOが登録されています。
できた…長い戦いだった…


なお、残念ながらKYF39からは残高確認ができずエラー画面となりますが
肝心の振込操作の時の認証操作については何も問題はないのでご安心ください。


そんなわけで時代から取り残されるとこんな不便な目に遭遇するというほとんどの
方にとってはどうでもいい旧世代型レプリロイドのぼやきでした。かしこ。

いろいろ試す48

●最近のOpenOCD更新事情
今年の2月に即効飽きて罪基板になってしまったRaspiPico。
こちらは複数コアを持つCortex-M0+のMCUを搭載しているわけですが、OpenOCDで
使う為にはSWDマルチドロップに対応しないといけません。

現状ではまだRaspiPico専用のOpenOCDを使用することになりますが、OpenOCDの
gerritにはマルチドロップのパッチが上がっており検証が繰り返されております。
なんかもうそろそろmergedになりそうな雰囲気ですので首を長くして待つことに
しましょう。それとねむいさんとこのOpenOCDバイナリは本家とESP32とRaspiPico
の3つに分裂してしまっているのですべて統合してすっきりさせたいものです。


●モノがない…
・半導体製品がない
皆様ご存じの通り、コロナショック以来半導体需要が異常に増加しており半導体
特にマイコンの納期がやたらと延びています。
ねむいさんのところも打撃を受けていて旧三菱系ルネサスマイコンの納期が来年とか
言われてしまい必死になって流通在庫をかき集め何とか糊口をしのいでいる次第です。
STM32とかのCortex-M系ARMマイコンももちろん波及しており品切れになったり納期
延長とかになっていると商社の方に話を聞きました。
電脳おじ様のブログにおいてSTM32の枯渇問題について深く言及されており非常に
参考になりました。

来年になったら状況変わるかも?って楽観的に構えてましたが…

・マテリアルがない
ないわけじゃないんですけどなんかすごい値段が跳ね上がっているのです。
特に銅。先物チャート見ていただければわかりますがこちらもコロナショックを
皮切りに2021年7月末現在も超爆上げしており
実物も糞みたいに上がっています。
で、銅の値段が上がると影響するのが電線です!特に太い電線の価格がころっころ
変わっている!もう勘弁してくだち!111!!!
そして電線の値段が上がるということは…

・ナイロンもないろん
す み ま せ ん
ワイヤハーネスとか基板接続用コネクタでよく使用される66ナイロンとかが
ないろんとのことです…
こちらについてはころすけさまのコネクタ納期遅れについてのブログ記事解説に
詳しいです…ちなみにコネクタだけじゃなくってリレーやスイッチとかの機構
がある電子部品やはたまたプラスティックのカバーがあるメカパーツすら納期
が遅れているそうでしかも上にあげた通り金属系も値段上がっているのでプライス
ツインターボ上げ状態で最終製品はマルチプルターボ上げになり我々の給与に
マイナスに作用するといたるがしんじゃうルナ先生理論となっております。
なお最終製品の納期はマルチプルターボにならなくてそのぶんだけねむいさんの
休日が減ります。

そんなわけでワイヤハーネスの制作費用も値段が上がってしまったので自分で
ハーネス打つ機会がなんか増えた気がします…
ころすけ様は2022年まで半導体不足が落ち着かないと予想されておりますが
各企業がパニックになって過剰に抱えた在庫が何年かたって秋月とかに大量に放出
されるんじゃないかなと私も思ってます。特にルネサス。


●FatFsのディレクトリ破壊問題を追う
ねむいさんじつは数年越しでだらだら調査している問題があります。
内容は"FatFsでファイルコピーしたらディレクトリが破壊される"という内容で
下記の条件で起こります。
・128MByteのMMCv3カード
・FAT16でフォーマット(FatFs・Windowsでフォーマットしても同じ結果)
・512Byte以上のファイルをコピーすると発生。それ以下では壊れない。
・SPI互換モード/ネイティブモードの両方で発生する。
・気づいたのは2019年の夏。R0.13から最新のR0.14bまで発生確認済み。


CQ誌のMB618T付録基板のSPIで試したときはこんな感じにです
コピーしたらぐっちゃぐちゃ。


2014年ごろのMB618T向けのプログラム引っ張り出してきても同じ。


STM32H7のSDMMC使ったいつものでも同じ結果に…

FatFs module test terminal for STM32H747XIH6
LFN Enabled, Code page: 932
AppVersion : W.I.P
Build Date : Jul 30 2021
>fs

FAT type = FAT16
Bytes/Cluster = 16384
Number of FATs = 1
Root DIR entries = 512
Sectors/FAT = 32
Number of clusters = 7836
Volume start (lba) = 63
FAT start (lba) = 64
DIR start (lba,clustor) = 96
Data start (lba) = 128

Volume name is 128MB
Volume S/N is 4F45-2E91
...
1 files, 558702 bytes.
125376 folders.
124816 KiB total disk space.
96 KiB available.
>fl

----A2020/09/13 22:02 558702 2613.jpg
1 File(s), 558702 bytes total
0 Dir(s), 127811584 bytes free
>fx 2613.jpg 1713.jpg

Opening "2613.jpg"
Creating "1713.jpg"
Copying file...
524288 bytes copied at 772 kB/sec.

>fl

DR-SA2019/10/01 11:22 524288 ウキコテア,;ユ.eソゥ
D-H-A2056/06/21 03:38 140824249 マノエ鹵}.、zE
-RHS-2041/09/15 12:51 3292342498 イy ャォ.モ。
-R-SA2046/06/09 14:32 4013330094 Eッ・.ネソ
--HS-2026/08/05 29:30 2671303503 g6ゥニ=j゚.3
--HSA1991/04/24 14:63 1051517575 y゙j赧ヤ。・
DR---2062/02/16 30:21 2454358133 ・xv!ウリン.」O・
-R-SA2032/15/27 22:61 1018623284 @・・セ・.ヌW
DR--A2029/04/07 13:40 2681369147 ヲn・ニq;キ.ーm
D---A2026/14/27 19:29 2945400368 キkヒ[n>xk.・
-RH-A2068/15/21 07:47 1796965267 }イョソc_イコ.
DRH-A2015/11/05 09:00 3404787036 &Kvヒン・. 
-R-SA1993/03/19 20:14 1157293741 タカ8ユ・.トモm
D-HS-1980/00/00 00:00 0 :u鈎4_ro.z盧
7 File(s),2116474074 bytes total
7 Dir(s), 127287296 bytes free
>fm 0 1 16384

The volume will be formatted. Are you sure? (Y/n)=Y

rc=0 FR_OK
>

ううむよくわからない。
フォーマットとかはちゃんとできるしSTM32F7とかのマスストレージのサンプル
つかってWindows上でコピーは全く問題なしだからローレベルの書き込み操作は
問題ないみたいです。

ていうか今日び128GBのSDの時代なのに128MBの1bitモードしかないMMCとかに
こだわるなよって言われそうですがやっぱ気になっちゃいます。


↑とは関係ないですがGCCバージョンアップにともなうビルド時のワーニング
 発生の問題はR0.14aで修正されておりました。ありがとうございます。

Go to top of page