• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:linux環境下のUART通信で文字化けしてしまう)

Linux環境下でのUART通信で文字化けが発生する原因とは?

このQ&Aのポイント
  • Linux環境下でUART通信を行う際に、特定の条件下で文字化けが発生する現象が報告されています。
  • 文字化けが発生するのは、マイコンから送信されるバイナリ形式のデータを利用した場合に限られます。
  • 文字化けの原因は、バイナリデータの文字列が任意のデータ列となった際に予期せぬ動作が生じることが考えられます。

質問者が選んだベストアンサー

  • ベストアンサー
  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.1

「10進形式」「バイナリ形式」「文字列」とありますが、例えば数の1000が「10進形式」では文字の"1000"で、「バイナリ形式」では文字の"3E8"で表現されているという意味でしょうか。 通信で問題点を切り分けるには、回線モニターとかアナライザーを使用してマイコン側からのデータに問題があるのか、機器側に問題があるのか切り分ける必要があります。 他のOSでは実績があるとのことですから、機器側に問題がある可能性が高いですが、その場合には設定とプログラムの見直しは当然ですが、フレーミング/オーバラン/オーバフロー/パリティなどのエラーを検出するようにプログラミングしておく必要もあります。 これらのエラー検出はしているのでしょうか。 現象から考えられるのは、フレーミングエラーかボーレートのずれ(許容範囲を越えている)でしょうか。 ただ、これらは「10進形式」でも発生してもおかしくないので、「任意のデータ列となった場合に限り」となると、あるデータ数を越えると発生するのかもしれません。 「任意のデータ列となった場合に限り」の意味が「ある文字」であるならプログラム上の処理の問題ということになります。 まずは、回線モニターを使って解析するか、フレーミングエラーを検出して見たらいかがでしょうか。

hiroandroid
質問者

お礼

ご回答ありがとうございます。 説明不足で申し訳ございませんでした。 「バイナリ形式」では文字の"3E8"で表現されます。 ご指摘の通り、アナライザーでの確認がまだでしたので 試してみたいと思います。 また、エラーを検出する処理にも漏れがありそうなので その辺りも含めて見直しを行いたいと思います。 アドバイスありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • FATの故障? 1ファイル内の文字化け

    マイコンでmicroSDにデータを書込みソフトを動かしているのですが、1ファイルの中に時々文字化けが発生します。 バイナリエディタで見ると、文字化けの発生する場所の先頭アドレスは0x59200, 0x6EE00, 0x72C00のように、どうも16で割り切れるアドレスになっていることが多いです。 これは - FATが壊れている - データ領域が壊れている - その他 のどのような状況なのでしょうか? 1ファイルには21600行のデータを書込むのですが、上記のような文字化けが100行程度入り、その他の場所は正常なデータ書込みがされているようです。

  • VBの文字化け

    非常に困っています。OSはWin2000SP4、VB6.0で作ったアプリが突然に文字化けを起こしてしまいました。症状としてはコマンドボタンのキャプションやテキストボックスのテキストが文字化け、もしくは何も表示されない現象を起こし、プリンターの2バイト文字も文字化けを起こしています。プロジェクトの段階では正常に動作しますが、実行ファイルにすると発生し、セットアップファイルでセットアップしても文字化けが発生します。自作以外のアプリでも一部で発生してますが正常に動作するアプリもあり何が原因か不明です。文字化けを起こした.EXEはXPでは正常に動作しますし、他のWin2000でも正常に動作します。VBがインストールされたマシンだけがこのような症状を起こします。 Win9Xで作ったものをWin2000にコピーして使った状況によく似ています。原因と対処方法を教えて頂けませんか。 (出来ればOSの再インストールを回避したい)よろしくお願いします。

  • Excel 2007 2003 共存環境で文字化け

    会社のコンピュータが更新されWindows 7マシン導入となりました。 Excel2007形式ではマクロがあるものと無いものでは拡張子が違う 都合から、マクロのデバッグが終わるまでは当分2003と2007を両方 インストールして共存環境で使っています。ここで問題が生じました。 外字を登録したのですが、Excel2007では正常に表示されるのですが、 Excel2003では文字化けしてしまいます。中国語とか韓国語のフォント 云々ということも試しましたが、関係ないようです。 (もともと2007では正常に表示されるので、文字コードの割り当ての 問題ではないと思います。)このExcel2003でも文字化けしないように する手段をご教示いただければと思います。 ちなみに、外字ですが、Xpの環境で2003の場合や Windows7の環境で2007の場合は正常に動作します。 どうかよろしくお願いします。

  • 文字化けが直らなくて困ってます><

    FC2でホームページを開いたのですが、一部文字化けが発生してしまい、困っています。 最初アップロードしたときは正常に表示されたのですが、突然文字化けするようになってしまいました。 文字化け防止のタグも試してみたのですが、一向に改善する気配が見られません>< 助けてください。

  • AVRでUART通信をしたい

    誰か助けてください!! AVRTiny2313を利用してUART通信するプログラムを組んでいます。 信号はどうやら出力しているようなのですが、レートがおかしいのです。 データシートより、「駆動周波数/16/ボーレート-1」で9600bpsの通信速度を設定しているはずなのですがオシロで確認したところ8倍位遅いレートで通信してるのです。 ヒューズでは内部8MHz、外部8MHz(外部に8MHzのセラロックが付いてます)共に試してみましたが変化ありません。 周波数が本当に8MHzなのか確かめる為にクロックを外部に引き出し、オシロで計測してみましたが位相がかなりブレていて波形が見えませんでした(太い1本の線みたいに見えます) ちなみにF_CPU値も8000000と設定してていますので式は間違いないとは思うのですが…。 私の書いたソースに問題が有るのかと思い他所様のエコーバックテストのソースで通信してみましたがやはり同じように何倍も長い信号が出力されました。 あと考えられるとすればクロックがCPUに供給される前にプリスケーラで分周されている位しか考えられないのですがそれっぽい事はデータシートに記載は無いです。 他に設定を見直す箇所が有れば何方か教えてください!!

  • linuxでphpファイルが文字化け

    はじめまして。 linux(FedoraCore3)にphpファイルをアップして会社内のWebツールを提供しています。今度、Webツールの改修の必要があるのですが、linux上のphpファイルが文字化けして編集することができません。 linux上でviエディタで開いた場合も、FFFTPでWindowsマシンに落としてからテキストエディタで開いた場合も、文字化けしています。 (FFFTPはアスキー転送/バイナリ転送の両方を試してみました。) (テキストエディタは秀丸とEmEditorでEUC/UTF-8/jisなど全文字コードを試してみました。) 文字化けは日本語の部分に限らず、全体的に化けています。 また、EmEditorで開くと「ファイルに含まれていたNull文字(00H)は、スペースに変換して開きます。」とメッセージが出ます。 linux上ではWebツールとして正常に動作するのに、エディタで開いたときだけ化けてしまうのは何故でしょうか? ファイル内の「00H」の文字がNull扱いされているのが原因なのかとは思うのですが具体的にどう対処すれば良いのかわかりません。 作成した前任者は退社しており、手詰まりになってしまいました。 推測の域でも結構ですので、何かアドバイスいただけますでしょうか。 乱文で申し訳ありませんがよろしくお願いいたします。

  • Outlook2007の文字化け

    WindowsXPPRO SP2とOffice2007Ultimateの組み合わせで、Outlook2007メール受信時に文字化けがすることがあり困っています。 いつも発生するわけではなくて、Unicodeのメール受信で、(深い確証はないですが)特定の文字列が含まれているとそうなるみたいです。 タイトルは正常で本文のみ文字化けします。 Office2007は2003からのアップデートですが、2003のときはそのような不具合はなく、Office2007の再インストールでは変わらなかったです。 よろしくお願いします。

  • iTunesの文字化けについて

    最近WindowsからMacに切り替えた者です。 Windows時代からWindowsPCにデータを入れて、 iPodを使用してきたのですが、 それらのデータをHDDを用いてMacPCに移し、iTunesを開いたところ、 文字化けが発生してしまいました。 あまり仕組みがよくわからず、 ctrl+クリックのIDタグのところをいじってみたり、 ネットで文字化けを直すようなソフトをダウンロードしてみたり、 色々と試行錯誤した結果、曲の大半は正常に戻ったのですが、 一部の曲だけはどうしても文字化けが直りません。 どうすればよいのでしょうか? できればこの文字化けの原因、仕組みなども含めて、 教えて頂けると幸いです。

    • 締切済み
    • Mac
  • C言語とシリアル通信の送受信データの概念

    C言語とシリアル通信の送受信データの概念 今シリアル通信で基盤上のデータを読み書きするツールを作っています。 基盤はまだ手元にないので、先にプログラムと、基盤の動作を模したプログラムを作るつもりです。 基盤の説明にはデータはバイナリで送るようにと書かれていたので、 文字列で1バイトずつ割り当てようと考えました。 しかし、どうやって1234などの数値を1バイトずつ割り振るのか、 バイナリって何だっけと調べているうちにわけが分からなくなってきました。 たとえば1234という10進数の数値を送りたいとき、 現状ではchar型の文字列"1234"を渡しています。 もしかしてこれは間違っていて、本当は char s[] = { 1, 2, 3, 4 }; 16進数の場合はabcdなら char s[] = { 0xa, 0xb, 0xc, 0xd }; として渡すのが正しいのでしょうか。 これでprintfを使うと文字化けして何だかバイナリっぽいぞと感じましたが。 また、バイナリ以外ならどんな送り方があるのでしょう?

  • AVRマイコン UART動作異常

    AVRマイコンのATmega168にてPCとRS-232Cにてシリアル通信(UART)を行うと最初のスタートビット'L'が正常に出ず、スタートビット'L'の後すぐに'H'に戻ってその後データビットを送っています。2回目以降のスタートビットは正常に'L'が指定したボーレートの時間幅で出ており、問題はありません。最初のスタートビットが正常に出ない原因がわかりませんので教えてください。 システムクロック:1MHz(内部発振器のみ) ボーレート:4800bps データビット数:8bit ストップビット数:1bit パリティビット数:なし -------------------------------------------- #include <avr/io.h> #include <util/delay.h> #include <avr/pgmspace.h> #define sbi(addr,bit) addr |= (1<<bit) #define cbi(addr,bit) addr &= ~(1<<bit) void port_init(void){ PORTB = 0xFE; DDRB = 0xFF; asm("NOP"); } void uart_init(void){ sbi(DDRD,1); cbi(DDRD,0); asm("NOP"); } void uart_putchar(unsigned char c){ loop_until_bit_is_set(UCSR0A,UDRE0); // asm("NOP"); UDR0 = c; } void _delay_1s(void){ int i; for(i=0;i<100;i++){ _delay_ms(10); } } int main(void) { port_init(); uart_init(); UCSR0B = _BV(TXEN0); UCSR0C = 0b00000110; UBRR0H = (uint8_t)0; UBRR0L = (uint8_t)12; while(1) { uart_putchar(0b01011010); _delay_1s(); } return 0; } -----------------------------------------------