2014年9月28日日曜日

Errata?

こじまうす10のマイコンはSTM32F405RGT6である.加速度,ジャイロセンサにはMPU-6500を使っている.

MPU-6500との通信はSPIで行っているが,これでおおいにはまった.

SPI通信はDMACを使ってバックグラウンドで行っているがどういうわけか失敗することがある.まる一日かけて,どうやらシリアル通信と干渉しているらしいことをつきとめた.さらに半日くらいかけてポートBが勝手に書き換わっていることをつきとめた.以前から通信のときにLEDがピカピカするとは思っていたがなにゆえ勝手に書き換わる?

そうすると通信のDMAあたりがあやしいが,試しにDMACなしでシリアル通信させると問題ない.じっくりソースをにらんでも間違いが見つからない.何気なくPriorityをMediumからVeryHighに変更する → もしかして解決した?今度はMediumからLowへ変更する → これもOK?

どういうことだ?と思いながらErrata sheetを見ると,少し違うがかなり近いものがのっている.確かにフォトセンサのLEDはDMACでポートBをたたいているので,DMA転送がぶつかるバグがあるならば書き換わる可能性はある.

結局SPI通信中にポートBを書き換えるDMAとシリアル通信のDMAがぶつかって,チップセレクト用のポート出力が書き換わってSPI転送が強制的に終了していたようだ.

2日間も費やしてしまった.チップのバグにつきあっている時間はないんだが...

原因はわかったが,さらに様子をみていると結局Priorityを変更してもダメみたいなのでどうしようもない.

実際にはどうしようもないということはないが,スマートな方法はない.

0 件のコメント:

コメントを投稿