<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SPI | 即戦力モノづくり!エンジニアへの道標</title>
	<atom:link href="https://depfields.com/tag/spi/feed/" rel="self" type="application/rss+xml" />
	<link>https://depfields.com</link>
	<description>組み込み（マイコン）スキルを楽しんで学びながら身につけて短期間で効率よく自由自在に扱えるようになりたいと思いませんか？</description>
	<lastBuildDate>Tue, 11 Jul 2023 11:02:01 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3.1</generator>

<image>
	<url>https://depfields.com/wp-content/uploads/2020/07/cropped-favicon-1-32x32.png</url>
	<title>SPI | 即戦力モノづくり!エンジニアへの道標</title>
	<link>https://depfields.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>SPI通信のアプリ【STM32のSPI】</title>
		<link>https://depfields.com/spi-eeprom-apl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spi-eeprom-apl</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Thu, 18 Jun 2020 00:52:14 +0000</pubDate>
				<category><![CDATA[シリアル通信SPIを使ったアプリ]]></category>
		<category><![CDATA[SPI]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=3579</guid>

					<description><![CDATA[<p>SPI仕様EEPROMへの読み込み、書き込みするアプリケーションプログラムです。ペリフェラルの詳細はシリアル通信SPIで解説しています。  プログラム解説  ポイント 使用したEEPROM(BR25G640-3)はSPI [&#8230;]</p>
<p>The post <a href="https://depfields.com/spi-eeprom-apl/">SPI通信のアプリ【STM32のSPI】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img fetchpriority="high" width="640" height="426" src="https://depfields.com/wp-content/uploads/2020/06/fiber-4814456_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/fiber-4814456_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/06/fiber-4814456_640-300x200.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">SPI仕様EEPROMへの読み込み、書き込みするアプリケーションプログラムです。ペリフェラルの詳細は<strong><a href="https://depfields.com/spi/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">シリアル通信SPI</a></strong>で解説しています。</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I2C通信の場合はチップセレクトにアドレスを指定しますが、SPI通信の場合は通信のたびにチップセレクト信号CSを与えて(Lレベルにする)指定します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI EEPROMへの書き込み、読み込み等コマンドはプログラム冒頭に#defineで定義しておきます。内容については各EEPROMのデータシートを参考にしてください。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom_NUCLEO.jpg" alt="" class="wp-image-5129" width="529" height="436" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom_NUCLEO.jpg 529w, https://depfields.com/wp-content/uploads/2020/06/spi-eeprom_NUCLEO-300x247.jpg 300w" sizes="(max-width: 529px) 100vw, 529px" /><figcaption>SPI EEPROM接続図</figcaption></figure>



<p><span style="background-color: #003300; color: #ffffff;"> プログラム解説 </span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI EEPROMへの書き込み、読み込み等コマンドはプログラム冒頭に#defineで定義しておきます。内容については各EEPROMのデータシートを参考にしてください。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>２種類の文字列コマンド"1@", "2@"のどれかをPCで入力すると、そのコマンドに対応したデータがEEPROMに書き込まれ、保存されたデータを読み出し表示します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データはコマンドを入力するたびに書き換えられます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>シリアルUART通信によりPCから操作して、読み書き（送受信の機能）の状態をモニターしています。</p>
</div></div></div>



<div style="display: inline-block; background: #191970; padding: 5px 10px; color: #ffffff; border-radius: 5px 5px 0px 0px;"><strong>ポイント</strong></div>
<div style="background: #ffffea; border-radius: 0px 10px 10px 10px; padding: 10px; border: 3px solid #191970;">
<p>使用したEEPROM(BR25G640-3)はSPI通信モードは0と3にのみ対応していますのでパラメータのCPOLとCPHAの組み合わせはそれぞれ(0,0)か(1,1)となります。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/spi-rxtx/'>SPI通信仕様のEEPROM</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 8.80 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='3589'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-sm--margin-top"></div></div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/spi-eeprom-apl" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/3cc7c75ba5a2f2a91178f8e1b21e30ffb6f08e01e33ee3c34b98dc87b1265e48.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">SPI communication application[SPI of STM32] | Most Powerful Bible to Become a...</div></div><div class="lkc-url">https://en.depfields.com/spi-eeprom-apl</div><div class="lkc-excerpt">Application program to read and write to SPI specification EEPROM. Details of the peripherals are explained in Serial Communication SPI.For I2C communication, the address is specified in the chip select, but for SPI communication, the</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/spi-eeprom-apl/">SPI通信のアプリ【STM32のSPI】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>シリアル通信SPI【STM32のSPI詳細】</title>
		<link>https://depfields.com/spi/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spi</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Tue, 09 Jun 2020 07:18:18 +0000</pubDate>
				<category><![CDATA[各周辺機能(ペリフェラル)詳細]]></category>
		<category><![CDATA[SPI]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=2756</guid>

					<description><![CDATA[<p>STM32に内蔵のペリフェラルSPIの使い方を解説しています。この章ではSPI仕様のEEPROMへのデータの読み込および書き込を例に解説しています。 シリアル通信SPIとは SPI通信初期化手順 目的：使用するSPIはS [&#8230;]</p>
<p>The post <a href="https://depfields.com/spi/">シリアル通信SPI【STM32のSPI詳細】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="358" src="https://depfields.com/wp-content/uploads/2020/06/internet-4546508_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/internet-4546508_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/06/internet-4546508_640-300x168.jpg 300w, https://depfields.com/wp-content/uploads/2020/06/internet-4546508_640-320x180.jpg 320w" sizes="(max-width: 640px) 100vw, 640px" /></div>


<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">STM32に内蔵のペリフェラルSPIの使い方を解説しています。この章ではSPI仕様のEEPROMへのデータの読み込および書き込を例に解説しています。</p>







<h2 class="wp-block-heading">シリアル通信SPIとは</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">シリアル通信SPI</span></strong>は<strong>同期型シリアル通信</strong>の一つです。<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>クロック(SCLK)</strong>、<strong>入力MOSI</strong>、<strong>出力MISO</strong>、<strong>チップセレクト(CS)の4本の信号線</strong></span>で通信を行います。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPIに接続されるデバイスには<strong>マスタ</strong>と<strong>スレーブ</strong>があります。1つのマスタデバイスに<strong>共通のバスで複数のスレーブデバイスを接続</strong>でき、<strong>通信時にチップセレクト（CS）で通信対象のデバイスを選択</strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-connection.jpg" alt="" class="wp-image-2758" width="351" height="417" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-connection.jpg 349w, https://depfields.com/wp-content/uploads/2020/06/spi-connection-252x300.jpg 252w" sizes="(max-width: 351px) 100vw, 351px" /><figcaption class="wp-element-caption">シリアルSPI通信</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI通信はデバイスにより通信フォーマットは様々ですが、チップセレクト（CS）信号で通信対象のデバイスを選択し、通常は<strong>8ビット（1バイト）データを一単位としてコマンドやアドレスなどを送信（書き込み）し、デバイスレジスタからの応答データを受信（読み込み）します</strong>。I2C通信と比べると配線は4本で多いですが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">通信の仕組みがシンプルで高速</span></strong>なのが特徴です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>STM32のSPIコントローラはマスタおよびスレーブのどちらも対応できますが、ここではEEPROM(Rohm社製BR25G640-3)を使用したSPIマスタの解説をします。SPIはマスタが主導で、<strong>命令を実行するたびにクロックを発生</strong>させて8ビットデータをやりとりします。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom.jpg" alt="" class="wp-image-2759" width="333" height="246" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom.jpg 349w, https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-300x222.jpg 300w" sizes="(max-width: 333px) 100vw, 333px" /><figcaption class="wp-element-caption">SPI型EEPROM接続回路</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>EEPROMの命令モードは<strong>下記6種類</strong>です。このうちステータスレジスタの読み出し命令を与えた時のタイムチャートをみてみます。このEEPROMでは書き込み（MISO）はクロック(SCLK)の立ち上がりエッジに同期してデバイス内部に取り込まれ、読み込み（MOSI）はクロック(SCLK)の立下りエッジに同期してデバイス内部に取り込まれます。<strong>1バイト（8ビット）単位のリードステータスレジスタ(RDSR)コマンドコードを送信すると次の1バイト（8ビット）単位でステータスデータが返ってきます</strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>メモリデータの読み書きの場合にはリード（READ）やライト（WRITE）コマンドコードをデータ格納用メモリのアドレス（2バイト）を上位と下位の1バイトずつ分けたものとセットで送受信します。この例のEEPROMのアドレスは2バイトですが、デバイスにより異なる場合があります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-command.jpg" alt="" class="wp-image-2760" width="612" height="230" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-command.jpg 705w, https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-command-300x113.jpg 300w" sizes="(max-width: 612px) 100vw, 612px" /></figure>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-status-read.jpg" alt="" class="wp-image-2761" width="558" height="248" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-status-read.jpg 711w, https://depfields.com/wp-content/uploads/2020/06/spi-status-read-300x133.jpg 300w" sizes="(max-width: 558px) 100vw, 558px" /><figcaption class="wp-element-caption">ステータスレジスタ読み出し命令</figcaption></figure>



<h2 class="wp-block-heading">SPI通信初期化手順</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>まず、他のペリフェラルと同様に初期化を解説します。</p>
</div></div></div>



<p>目的：使用するSPIはSPI1でPB3-5を使用<br>■　チップセレクトはPE0</p>



<figure class="wp-block-image size-full"><img decoding="async" width="572" height="669" src="https://depfields.com/wp-content/uploads/2020/06/spi-setting.jpg" alt="" class="wp-image-13554" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-setting.jpg 572w, https://depfields.com/wp-content/uploads/2020/06/spi-setting-257x300.jpg 257w" sizes="(max-width: 572px) 100vw, 572px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;①　GPIOおよびSPI1にクロック供給&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>使用する<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">GPIOおよびSPI1にクロックを供給</span></strong>します。APB2バスに接続していますので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">APB2に供給</span></strong>します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;②　GPIOの設定&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI1に使用するポートはSCK,MISO,MOSIでPB3-5を<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">オルタネートプッシュプル出力に指定</span></strong>します。ここではGPIO_PinRemapConfig(GPIO_Remap_SPI1, ENABLE)を実行してリマップしてPB3-5およびPA15をSPI1に設定します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>このうちPA15はSTM32のSPI_NSSでマスタとするときは使用しません。さらに、PB3とPB4に関してはデフォルトではデバッグ用ポートの機能が割り当てられていますのでそのままでは使用できません。そこで、通常のGPIOポートに開放するためGPIO_PinRemapConfig(<strong>GPIO_Remap_SWJ_JTAGDisable, ENABLE</strong>)を実行しています。リマップでなくデフォルトのSPIを使用する場合はこの処理は不要です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">チップセレクトCS用にはPE0</span></strong>を通常のプッシュプル出力に設定しています。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;③　SPIの初期設定</span><span style="background-color: #003300; color: #ffffff;">&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">SPI通信の初期設定を実行</span></strong>します。まず初期化のはじめに対象のチップセレクトCS（PE0）をHレベルにしてSPI通信を受け付けないようにしておきます。</p>
</div></div></div>



<p>SPI初期化関数実行例： SPI_Init(SPI1, &amp;SPI_InitStructure);</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>関数の第1引数は<strong>設定対象の</strong>SPI(SPI1-3：マイコンによります）、第2引数は<strong>構造体メンバ</strong>になっていて以下に示します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-member1.jpg" alt="" class="wp-image-2764" width="657" height="161" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-member1.jpg 724w, https://depfields.com/wp-content/uploads/2020/06/spi-member1-300x73.jpg 300w" sizes="(max-width: 657px) 100vw, 657px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI_Directionメンバにはデータの方向性を指定します。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">通常は2線・全二重</span></strong>を指定します。</p>
</div></div></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-member2.png" alt="" class="wp-image-13730" width="658" height="129" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-member2.png 841w, https://depfields.com/wp-content/uploads/2020/06/spi-member2-300x59.png 300w, https://depfields.com/wp-content/uploads/2020/06/spi-member2-768x151.png 768w" sizes="(max-width: 658px) 100vw, 658px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI_ModeメンバにはSPIのモードを指定します。ここでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">マスタモード</span></strong>を指定します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-member3.jpg" alt="" class="wp-image-2766" width="654" height="123" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-member3.jpg 721w, https://depfields.com/wp-content/uploads/2020/06/spi-member3-300x57.jpg 300w" sizes="(max-width: 654px) 100vw, 654px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI_DataSizeメンバにはデータサイズを指定します。ここでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">８ビットデータ</span></strong>を扱います。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-member4.jpg" alt="" class="wp-image-2767" width="661" height="198" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-member4.jpg 727w, https://depfields.com/wp-content/uploads/2020/06/spi-member4-300x90.jpg 300w" sizes="(max-width: 661px) 100vw, 661px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI_CPOLメンバには待機中のSCLKの信号レベルを指定します。SPI_CPHAメンバにはデータを読み込むクロックのタイミングを指定します。クロックの立ち上がりエッジでデータを読み込むためには<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">待機中のSCLKの信号レベルはL</span></strong>としていて<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">最初のエッジタイミングで読み込む</span></strong>ように指定します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI_CPOLメンバは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">クロックの極性</span></strong>、SPI_CPHAメンバは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">クロックの位相</span></strong>を意味し、これらの組み合わせで<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">SPIモード</span></strong>と呼ばれるSPI通信モードを設定します。スレーブ側のデバイスによっては使用できるモードが限られていますので適切に設定します。</p>
</div></div></div>



<figure class="wp-block-image size-full"><img decoding="async" width="467" height="164" src="https://depfields.com/wp-content/uploads/2020/06/spi-transfer-mode.jpg" alt="" class="wp-image-13582" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-transfer-mode.jpg 467w, https://depfields.com/wp-content/uploads/2020/06/spi-transfer-mode-300x105.jpg 300w" sizes="(max-width: 467px) 100vw, 467px" /><figcaption class="wp-element-caption">SPI通信モード</figcaption></figure>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<figure class="wp-block-image size-full"><img decoding="async" width="676" height="709" src="https://depfields.com/wp-content/uploads/2022/06/spi-time-chart.jpg" alt="" class="wp-image-13588" srcset="https://depfields.com/wp-content/uploads/2022/06/spi-time-chart.jpg 676w, https://depfields.com/wp-content/uploads/2022/06/spi-time-chart-286x300.jpg 286w" sizes="(max-width: 676px) 100vw, 676px" /><figcaption class="wp-element-caption">SPIタイムチャート(レファレンスマニュアルより）</figcaption></figure>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-member5.png" alt="" class="wp-image-11178" width="678" height="254" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-member5.png 726w, https://depfields.com/wp-content/uploads/2020/06/spi-member5-300x112.png 300w" sizes="(max-width: 678px) 100vw, 678px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI_BaudRatePrescalerメンバには通信速度を設定するための<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">プリスケーラの分周比</span></strong>を指定します。例えば16分周を指定するとPCLK2が72MHzの場合はSPIに供給されるクロックは4MHzになります。EEPROMの仕様によりクロックの最高速度が定められていますので<strong>超えないものを指定</strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="725" height="139" src="https://depfields.com/wp-content/uploads/2020/06/spi-member6.jpg" alt="" class="wp-image-2770" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-member6.jpg 725w, https://depfields.com/wp-content/uploads/2020/06/spi-member6-300x58.jpg 300w" sizes="(max-width: 725px) 100vw, 725px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI_FirstBitメンバにはデータ送信をMSBから行うMSBファーストかLSBから行うLSBファーストを指定します。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">通常はMSBファースト</span></strong>を指定します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;④　SPI1の有効化</span><span style="background-color: #003300; color: #ffffff;">&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>これまででSPI通信の初期化ができましたのでSPI_Cmd関数を実行してSPI通信をを有効にします。</p>
</div></div></div>



<p>SPI初期化関数実行例： SPI_Cmd(SPI1, ENABLE);</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>関数の第1引数には<strong>設定対象のSPI(SPI1-3:マイコンによります)</strong> を指定し、第2引数は<strong>ENABLEで有効</strong>、<strong>DISABLEで無効</strong>となります。</p>
</div></div></div>



<h2 class="wp-block-heading">SPI通信のバイト送受信</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPIコントローラの<strong>初期化が完了</strong>すると、アプリケーションプログラム内で<strong>任意に通信を開始することができます</strong>。共通のSPIバスに複数のデバイスを接続している場合は通信毎に対象のデバイスをCS信号で選択し、通信を実行して終了時には選択解除します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI通信において最も基本的な1バイトデータを送受信する流れをみていきましょう。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-read-write.jpg" alt="" class="wp-image-2771" width="562" height="311" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-read-write.jpg 562w, https://depfields.com/wp-content/uploads/2020/06/spi-read-write-300x166.jpg 300w" sizes="(max-width: 562px) 100vw, 562px" /><figcaption class="wp-element-caption">SPI通信のバイト送受信</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-comunication-flow.jpg" alt="" class="wp-image-2772" width="523" height="442" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-comunication-flow.jpg 630w, https://depfields.com/wp-content/uploads/2020/06/spi-comunication-flow-300x253.jpg 300w" sizes="(max-width: 523px) 100vw, 523px" /><figcaption class="wp-element-caption">SPI通信流れ</figcaption></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;①　SPIデバイス選択（チップセレクト）</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>通信対象のSPIデバイスの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">CS信号をLレベルにして選択</span></strong>します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;②　SPI送受信関数　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>1バイトデータを送受信するための手順を<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">SPI_Send_Receive関数</span></strong>にまとめました。データの送信を開始する前に、前回の送信が完了しているかどうかを<strong>SPI_I2S_GetFlagStatus関数</strong>の送信ステータスフラグ(<strong>SPI_I2S_FLAG_TXE)</strong>で確認します。フラグがSETになった段階で送信レジスタが空になったことになります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-status-flag.jpg" alt="" class="wp-image-2773" width="575" height="265" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-status-flag.jpg 664w, https://depfields.com/wp-content/uploads/2020/06/spi-status-flag-300x138.jpg 300w" sizes="(max-width: 575px) 100vw, 575px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>送信準備完了しだい<strong>SPI_I2S_SendData関数</strong>で1バイトデータを送信します。関数の第1引数は<strong>設定対象のSPI(SPI1-3:マイコンによります)</strong>を指定し、第2引数は<strong>送信する<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">1バイトデータ</span></strong>を指定します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データ送信すると同時に相手からデータが返ってきて受信レジスタに入るのですが入っているかどうかを<strong>SPI_I2S_GetFlagStatus関数</strong>の受信ステータスフラグ(<strong>SPI_I2S_FLAG_RXNE)</strong>で確認します。フラグがSETになった段階で受信レジスタにデータがあることになります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>受信準備ができたところで<strong>SPI_I2S_ReceiveData関数</strong>を実行して受信データを取得します。この関数は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">SPIが最後に受信したデータを返し</span></strong>ます。関数の引数は <strong>設定対象のSPI(SPI1-3:マイコンによります)</strong> を指定します。<strong>データを読み込むと受信フラグは自動的にクリア</strong>されます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPI通信はマスタ側とスレーブ側は発生したクロックに合わせてデータを同時通信します。マスタが1バイトコマンドを送信中すると同時にスレーブ側からも0x00や0xFFの1バイトデータが返されて受信レジスタに格納されます。そのため、<strong>SPI_Send_Receive関数</strong>では受信フラグをクリアして、受信データを取得する処理も含めています。送信のときは受信データの返り値は使用しません。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;③　SPIデバイス選択解除　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>通信完了後は通信対象のSPIデバイスの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">CS信号をHレベルにして選択解除</span></strong>します。その前に、通信が完了してビジー状態でないことを<strong>SPI_I2S_GetFlagStatus関数</strong>のビジー状態フラグ(<strong>SPI_I2S_FLAG_BSY)</strong>で確認しておきます。フラグがSETである段階ではビジー状態ですので待機します。</p>
</div></div></div>



<h2 class="wp-block-heading">EEPROM書き込み</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>これまでは1バイトデータ送受信の流れを見てきました。実際の送受信で例えばEEPROMの書き込みと読み込みでは作成した送受信関数<strong>SPI_Send_Receive関数</strong>を組み合わせてコマンド、アドレスを順次送り、その後データを送信したり、受信したりします。</p>
</div></div></div>



<figure class="wp-block-image size-full"><img decoding="async" width="252" height="547" src="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-write.jpg" alt="" class="wp-image-11464" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-write.jpg 252w, https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-write-138x300.jpg 138w" sizes="(max-width: 252px) 100vw, 252px" /><figcaption class="wp-element-caption">EEPROM書き込み</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-write-function.jpg" alt="" class="wp-image-2776" width="594" height="576" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-write-function.jpg 694w, https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-write-function-300x291.jpg 300w" sizes="(max-width: 594px) 100vw, 594px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>EEPROM書き込み専用に<strong>SPI_EEPROM_writebyte関数</strong>を作成してみましょう。</p>
</div></div></div>



<p>SPI_EEPROMバイトデータ書き込み関数実行例： SPI_EEPROM_writebyte(Address, Data);</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>このEEPROMは<strong>アドレスが16ビット</strong>ですので、関数の第1引数は<strong>16ビットアドレス</strong>を指定し、第2引数は<strong>格納したい1バイト（8ビット）データ</strong>を指定する関数を定義します。書き込みコマンドバイト、アドレスバイト、データバイトなど複数のバイトデータを送信する一連の手順を関数内にまとめます。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;①　デバイスアドレス　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPIで通信するデータは1バイト単位ですので、指定するアドレスを関数内で1バイト分の上位アドレスと下位アドレスに分離しておきます。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;②　書き込み許可　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>書き込みの場合は書き込み許可に設定しておく必要があります。<strong>EEPROM_write_enable関数</strong>にまとめましたので書き込み前に実行しておきます。わざわざ関数にまとめなくてもEEPROMのイネーブルコマンドバイトWRENを<strong>SPI_EEPROM_writebyte関数内</strong>の書き込みコマンドバイトWRITEの前に送信してもかまいません。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;③　書き込みコマンドバイト送信　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>書き込みコマンドバイトWRITE、上位アドレス、下位アドレス、そして格納したいバイトデータの順に送信します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;④　ステータスレジスタによる待機　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>書き込みにはある程度時間がかかりますので、ステータスレジスタ読み込みコマンドバイトRDSRを送信して得られたステータスレジスタのビット0の状態がビジーでなくなるまで待機するようにします。<strong>Write_wait関数</strong>にまとめています。</p>
</div></div></div>



<h2 class="wp-block-heading">EEPROM読み込み</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>EEPROMの読み込みの場合は書き込みの手順とほぼ同じですが<strong>書き込み許可のコマンド送信は必要ありません</strong>。書き込みのときと同様にアドレスを上位と下位に分離しておきます。読み込みの場合はレジスタからデータを一時メモリに取り込み関数の返り値として渡します。</p>
</div></div></div>



<figure class="wp-block-image size-full"><img decoding="async" width="216" height="422" src="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-read.jpg" alt="" class="wp-image-11466" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-read.jpg 216w, https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-read-154x300.jpg 154w" sizes="(max-width: 216px) 100vw, 216px" /><figcaption class="wp-element-caption">EEPROM読み込み</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-read-function.jpg" alt="" class="wp-image-2778" width="562" height="261" srcset="https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-read-function.jpg 660w, https://depfields.com/wp-content/uploads/2020/06/spi-eeprom-read-function-300x139.jpg 300w" sizes="(max-width: 562px) 100vw, 562px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>EEPROM読み込み専用に<strong>SPI_EEPROM_readbyte関数</strong>を作成してみましょう。</p>
</div></div></div>



<p>SPI_EEPROMバイトデータ読み込み関数実行例： Data = SPI_EEPROM_readbyte(Address);</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>関数の第1引数は読み込みたいデータを格納している<strong>16ビットアドレス</strong>を指定します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;①　読み込みコマンドバイト送信　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>読み込みコマンドバイトREAD、上位アドレス、下位アドレスのバイトデータの順に送信します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;②　ダミーバイト送信　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データを取り出すために、なんらかのバイトデータを送信すると<strong>SPI_Send_Receiver関数</strong>が返り値として受信データが取得できますので、一時メモリretに取り組みます。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;③　受信データ取得　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>SPIデバイス選択解除をしてから一時メモリretを<strong>SPI_EEPROM_readbyte関数</strong>の返り値とすると読み込みのたびにこの関数を実行すればバイトデータが取得できます。</p>
</div></div></div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/spi/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/fe1a0997a7a1b74b5e31ea46cb292e38b5ba7f800eb20517d80a656e51ffe68c.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Serial communication SPI[SPI details of STM32] | Most Powerful Bible to Becom...</div></div><div class="lkc-url">https://en.depfields.com/spi/</div><div class="lkc-excerpt">This section explains how to use the STM32&#039;s built-in peripheral SPI. In this chapter, reading and writing data to and from an SPI-specification EEPROM is explained as an example.What is Serial Communication SPI?Serial Commu</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/spi/">シリアル通信SPI【STM32のSPI詳細】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
