質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

1回答

2607閲覧

Raspberry PiでのSPI通信

TatsuyaMorita

総合スコア55

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

0クリップ

投稿2022/07/15 13:06

Raspberry Pi 4Bをマスター、Raspberry Pi Picoをスレーブとして、SPI通信するとき、下のように、Pythonでspi.xfer2を使うと、CS信号が2回ONになり、そのON時間も50μsぐらいあるため、クロックの周波数を1MHzにしても1回のSPI通信に150μsぐらいかかってしまうのですが、CS信号がONにするのを1回にして、CS信号がONになる時間を5μs以内にする方法があれば、教えていただけると幸いです。また、C言語で、wiringPiSPI.hを使って、SPI通信をしようとしたとき、MODE0(CPOL=0、CPHA=0)でしか出来なかったのですが、MODE1(CPOL=0、CPHA=1)でSPI通信する方法があれば、教えていただけると幸いです。

Python

1import spidev 2dummyData = [0x00,0x00] 3 4spi = spidev.SpiDev() 5spi.open(0, 0) 6 7spi.max_speed_hz = 1000000 # 1MHz 8spi.mode = 1 # SPI mode : 1 9 10while True: 11 readByteArray = spi.xfer2(dummyData) 12spi.close

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tmp

2022/07/26 08:53

Raspberry Pi 4B持っていない、その上のpyhonの処理速度がわからず、時間的な感覚がわからないですが spi.no_cs = True を指定してCSのON/OFFを自力でやってみては?
guest

回答1

0

クロックが1MHzとすると、クロックの1サイクルは1μsとなります。
それで1バイト、8ビットを転送しようとするなら、どーあがいても8μsかかります
なので、

CS信号がONにするのを1回にして、CS信号がONになる時間を5μs以内にする方法があれば、教えていただけると幸いです。

は不可能、ってことになろうかと

投稿2022/07/15 22:40

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TatsuyaMorita

2022/07/16 00:39

回答ありがとうございます。クロックが出ているときは、CS信号はOFFになっているので、CS信号がOFFになる時間は16マイクロ秒以上かかっても問題ありません。クロックが出てないCS信号がONになっている時間を5マイクロ秒以内にしたいです。
y_waiwai

2022/07/16 03:30

CS信号というのは、ChipEnable信号で、SPIメモリなどのアクセスのときに、アクセス中はその信号をON(Low)にする、という使い方をします どうもそういう想定から外れる使い方のようで、どういう回路図でどういうタイミングの信号かを提示しないと、どーにもならないかと。 で、提供されているライブラリで満足できないなら、提供されるライブラリは使わずに、自分でSPIデバイスをコントロールするようなコードを組まないといけないかと思います。 #まあ、もしかしたらベアメタルで、ってはなしになるかも
TatsuyaMorita

2022/07/16 23:31

回答ありがとうございます。ペアメタルというのは、SDカードにOSを入れずに、動かすということでしょうか?ベアメタルの場合、どのようにして、プログラムを書き込むのでしょうか?
y_waiwai

2022/07/17 00:32

OS管理下だと周辺デバイスはOS管理下にありライブラリやドライバを経由してのアクセスしかできません ここでドライバの想定外の使い方はできないってことになります ベアメタルはOSを使わないで直接コードの実行させるってことで、使える言語はC/C++限定となり、初期化コードやらメモリ配置やら余計な知識や配慮が必要となってしまいます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問