Sipeed MAix Bit with MIC MaixPy で マイク入力の確認が出来たので、
PC へ Serial で送れないか試してみました。
PC: Windows10
Sipeed MAix Bit with MIC を PC に USB接続して、TTL-Serialでデータの受信をします。
PC 側は、Python で serial で RAWデータを受信して、pyaudio.PyAudio() で、
PCのスピーカーへ音を出してみます。
1. 最初は、Sipeed MAix Bit 側の python script です。
uartx=UART.repl_uart()
Speed = 115200+9600*3
uartx.init(Speed,8,None,1,timeout=0)
で、Bit に付いている、プログラム転送用の Serial の回線速度を、大きくします。
残念ながら、115200+9600*3 以上大きくできません。
for dt in range(sample_points):
p=dt*4
print("%02x"%x[p],end="")
print("%02x"%x[p+1],end="")
#uartx.write('1')
#print(",",end="")
print("")
で、I2Sで受信した1 CHUNK データの先頭16bit だけを、Hex コードをASCII にして、
PCへ送信します。1 CHUNK の区切りは、CR+LF コードです。
2. 次は、 PC 側の python script です。
結果は、Sipeed MAix Bit with MIC に付いている USB-Serial のチップ(CH552T) が、
不味いのか、Baud Rate を 115200+9600*3 より大きくできないみたいで、そこで断念です。
CH552T のドライバーは、FTDI社の FT2232ドライバーを流用するとの事なので、
ここでとちっているのか?
FT2232 は、FT232 と FT245 の機能2個が、1 チップに内蔵されているとの事です。
なので、Windows10 のデバイスでは、 COM3,COM4 の2つが同時に現れるので、
合点が行きました。ここは、純正の FT2232チップを使って試してみるべきか?
未使用の、UART1,2 デバイス を GPIOピンに割り当てて、別の チップの USB-Serial で試してみれば、旨くいくかも知れません。
現状は、Bit のマイクに口笛を、ピーピーと吹くと、PC のマイクからそれに反応する音は出てくる程度です。
3. Sipeed MAix Bit 側の python script のコードを見直しました。
1) print() で送信するのを、1 CHUNK で、1回に、まとめて発行するようにしました。
2) from fpioa_manager import fm
を追記しました。
MaixPy 0.2.3 で、 boot.py で自動実行させたとき、
NameError: name 'fm' isn't defined
のエラーで停止しているようなので。
3) m=uartx.write(b1)
で、出力バイト数を必ず、変数で受け取ります。そうしないと、出力文字数 '2048' が、
Serial で送信したデータの末尾にゴミとして 2048 が付いてきます。
これは、多分、標準出力(STDOUT) を、 uartx でリダイレクトさせている為だと思います。
4. UART1 に、別途 USB-Serial (FT232RL) を付けて試してみました。
Maix-Bit silk | k210 IO | USB-Serial (FT232RL)
15 -- IO15 (tx) --> Rx
17 -- IO17 (rx) --> Tx
GND --> GND
注)上記以外は、オープン
USB-Serial VCC は結線しません。
回線速度(Baud Rate) は、 MAX=921600 で受信できますが、データ漏れが生じるので、
460800 (Flow control 無し) になりました。
921600 で正常にデータを扱うには、Hardware Flow control を使わないと無理と言う事でしょうか。
注) UART1~ は、Hardware Flow control 可能との事です。
PCのスピーカからの音は、まともに聴ける状態ではありません。
Bit のマイクに音を聞かせると、それに反応して、PCのスピーカからそれらしい音が出る程度です。
後は、バイナリデータで扱うかですか。
最初から、I2Sのデータ量から、必要な、USB-Serial の転送速度を計算すれば、
所詮、無理な事は判っていたのでしょうが、
世の中、やってみなければ判らないこともあるので、試してみました。