<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>http://mochiuwiki.e2.valueserver.jp/index.php?action=history&amp;feed=atom&amp;title=MSP430F149_-_EEPROM</id>
	<title>MSP430F149 - EEPROM - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="http://mochiuwiki.e2.valueserver.jp/index.php?action=history&amp;feed=atom&amp;title=MSP430F149_-_EEPROM"/>
	<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_EEPROM&amp;action=history"/>
	<updated>2026-04-26T10:29:20Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_EEPROM&amp;diff=13916&amp;oldid=prev</id>
		<title>Wiki: /* 25LC640A (64Kbit SPI EEPROM) */</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_EEPROM&amp;diff=13916&amp;oldid=prev"/>
		<updated>2025-12-29T22:20:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;25LC640A (64Kbit SPI EEPROM)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2025年12月30日 (火) 07:20時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l214&quot;&gt;214行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;214行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;実際に動作させる場合は、回路の接続や電源の供給等にも注意が必要である。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;実際に動作させる場合は、回路の接続や電源の供給等にも注意が必要である。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;特に、25LC640AのCS (チップセレクト) ピンは、適切なポートピンに接続して、ソースコード内で設定する必要がある。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;特に、25LC640AのCS (チップセレクト) ピンは、適切なポートピンに接続して、ソースコード内で設定する必要がある。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;下図に、MSP430F149と25LC640Aのシーケンス図を示す。&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[ファイル:MSP430 EEPROM SPI Sequence 1.jpg|フレームなし|中央]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l342&quot;&gt;342行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;345行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== AT24C32 (32Kbit I2C EEPROM) ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== AT24C32 (32Kbit I2C EEPROM) ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;AT24C32 EEPROMを使用してI2C通信する場合は、上記の24LC256のサンプルプログラムとほぼ同じとなる。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;AT24C32 EEPROMを使用してI2C通信する場合は、上記の24LC256のサンプルプログラムとほぼ同じとなる。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiuwiki:diff:1.41:old-13914:rev-13916:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_EEPROM&amp;diff=13914&amp;oldid=prev</id>
		<title>Wiki: /* 24LC256 (256Kbit I2C EEPROM) */</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_EEPROM&amp;diff=13914&amp;oldid=prev"/>
		<updated>2025-12-29T22:19:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;24LC256 (256Kbit I2C EEPROM)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2025年12月30日 (火) 07:19時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l94&quot;&gt;94行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;94行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;実際に動作させる場合は、回路の接続や電源の供給等にも注意が必要である。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;実際に動作させる場合は、回路の接続や電源の供給等にも注意が必要である。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;特に、I2C通信では、SDAとSCLのラインに4.7[kΩ]～10[kΩ]のプルアップ抵抗を接続する必要がある。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;特に、I2C通信では、SDAとSCLのラインに4.7[kΩ]～10[kΩ]のプルアップ抵抗を接続する必要がある。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;下図に、MSP430F149と24LC256のシーケンス図を示す。&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[ファイル:MSP430 EEPROM I2C Sequence 1.jpg|フレームなし|中央]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiuwiki:diff:1.41:old-13731:rev-13914:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_EEPROM&amp;diff=13731&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == EEPROM (Electrically Erasable Programmable Read-Only Memory) は、電気的に消去、書き込み可能な不揮発性メモリの1種である。&lt;br&gt; &lt;br&gt; EEPROMの主な特徴を以下に示す。&lt;br&gt; * 不揮発性 *: 電源を切ってもデータを保持できる。 * 書き換え可能 *: データの消去と書き込みを電気的に行うことができる。 * バイト単位のアクセス *: バイト単位でデータの読み書きが…」</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=MSP430F149_-_EEPROM&amp;diff=13731&amp;oldid=prev"/>
		<updated>2025-12-15T11:31:44Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == EEPROM (Electrically Erasable Programmable Read-Only Memory) は、電気的に消去、書き込み可能な不揮発性メモリの1種である。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; EEPROMの主な特徴を以下に示す。&amp;lt;br&amp;gt; * 不揮発性 *: 電源を切ってもデータを保持できる。 * 書き換え可能 *: データの消去と書き込みを電気的に行うことができる。 * バイト単位のアクセス *: バイト単位でデータの読み書きが…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
EEPROM (Electrically Erasable Programmable Read-Only Memory) は、電気的に消去、書き込み可能な不揮発性メモリの1種である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
EEPROMの主な特徴を以下に示す。&amp;lt;br&amp;gt;&lt;br /&gt;
* 不揮発性&lt;br /&gt;
*: 電源を切ってもデータを保持できる。&lt;br /&gt;
* 書き換え可能&lt;br /&gt;
*: データの消去と書き込みを電気的に行うことができる。&lt;br /&gt;
* バイト単位のアクセス&lt;br /&gt;
*: バイト単位でデータの読み書きが可能である。&lt;br /&gt;
* 書き換え回数の制限&lt;br /&gt;
*: 一般的に、100万回程度の書き換えが可能である。&lt;br /&gt;
* 低速&lt;br /&gt;
*: フラッシュメモリ等と比較して、読み書きの速度が遅い。&lt;br /&gt;
* シリアル通信&lt;br /&gt;
*: I2CやSPI等のシリアル通信インターフェースを使用して、マイクロコントローラと通信する。&lt;br /&gt;
* 容量&lt;br /&gt;
*: 数[Kbit]〜数[Mbit]までの容量のデバイスが存在する。&lt;br /&gt;
* 用途&lt;br /&gt;
*: 設定情報や較正データの保存、データロガー、小容量のデータ保存等に使用される。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
EEPROMは、マイコンのシステムで、不揮発性のデータ保存が必要な場合に広く使用されている。&amp;lt;br&amp;gt;&lt;br /&gt;
フラッシュメモリと比較して書き換え回数が多く、バイト単位のアクセスが可能な点が特徴である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ただし、書き換え速度が遅く、大容量のデータ保存には向かない。&amp;lt;br&amp;gt;&lt;br /&gt;
また、書き換え回数にも制限があるため、頻繁に更新されるデータの保存には適していない。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
したがって、用途に応じて、EEPROM、フラッシュメモリ、SRAM等の他のメモリデバイスを使い分ける必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
マイコンの内蔵メモリでデータ保存が可能な場合は、外付けのEEPROMを使用しないこともある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
EEPROMは、マイコンのシステムにおいて、小容量の不揮発性データ保存が必要な場合に重要な役割を果たすデバイスである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EEPROMの種類 ==&lt;br /&gt;
一般的に、外付けのEEPROMとして使用されているデバイスには、以下に示すようなものがある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
以下に示すEEPROMは、MSP430F149マイコンのI2CまたはSPIインターフェースに直接接続して使用することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
容量や速度、インターフェースの種類などの要件に応じて選択する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
特に、24LC256は、比較的大容量でI2Cインターフェースを備えているため、MSP430F149マイコンの組み合わせで広く使用されている人気の高いEEPROMの1つである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 24LC256 (256Kbit I2C EEPROM) ====&lt;br /&gt;
* Microchip社製の不揮発性メモリ&lt;br /&gt;
* I2Cインターフェースを使用&lt;br /&gt;
* 32[KB] (256[Kbit]) の容量&lt;br /&gt;
* 低消費電力で動作&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 25LC640A (64Kbit SPI EEPROM) ====&lt;br /&gt;
* Microchip社製の不揮発性メモリ&lt;br /&gt;
* SPIインターフェースを使用&lt;br /&gt;
* 8[KB] (64[Kbit]) の容量&lt;br /&gt;
* 高速動作が可能&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== AT24C32 (32Kbit I2C EEPROM) ====&lt;br /&gt;
* Atmel (現Microchip) 社製の不揮発性メモリ&lt;br /&gt;
* I2Cインターフェースを使用&lt;br /&gt;
* 4[KB] (32[Kbit]) の容量&lt;br /&gt;
* industryグレードの信頼性&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MSP430F149とEEPROMの接続 ==&lt;br /&gt;
MSP430F149マイコンは、USART0モジュールを使用してI2CまたはSPI通信を行うことができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== I2C接続 ====&lt;br /&gt;
MSP430F149のUSART0モジュールをI2Cモードで使用する場合、以下のピンを使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
* P3.1 - SDA (I2Cデータライン)&lt;br /&gt;
* P3.3 - SCL (I2Cクロックライン)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
I2C通信では、SDAとSCLの両方のラインに外部プルアップ抵抗 (通常4.7[kΩ]～10[kΩ]) が必要である。&amp;lt;br&amp;gt;&lt;br /&gt;
複数のデバイスをI2Cバスに接続する場合は、それぞれのデバイスに異なるアドレスを設定する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== SPI接続 ====&lt;br /&gt;
MSP430F149のUSART0モジュールをSPIモードで使用する場合、以下のピンを使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
* P3.1 - SIMO (マスタ出力、スレーブ入力)&lt;br /&gt;
* P3.2 - SOMI (マスタ入力、スレーブ出力)&lt;br /&gt;
* P3.3 - UCLK (SPIクロック)&lt;br /&gt;
* P3.0 - CS (チップセレクト、GPIO制御)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
SPI通信では、チップセレクト (CS) 信号は通常のGPIOピンを使用して制御する。&amp;lt;br&amp;gt;&lt;br /&gt;
複数のSPIデバイスを接続する場合は、それぞれに異なるCSピンを割り当てる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== サンプルコード ==&lt;br /&gt;
==== 24LC256 (256Kbit I2C EEPROM) ====&lt;br /&gt;
以下の例では、I2C通信を使用してEEPROMとの通信を行っている。&amp;lt;br&amp;gt;&lt;br /&gt;
I2C通信を初期化した後、i2c_write_byte関数を使用してEEPROMにデータを書き込み、i2c_read_byte関数を使用して書き込んだデータを読み出している。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
# i2c_init関数でI2Cの初期化を行う。&amp;lt;br&amp;gt;ピンの設定、I2Cの設定、クロック周波数の設定等を行う。&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;MSP430F149マイコンのP3.1をSDA、P3.3をSCLに指定している。&lt;br /&gt;
#: &amp;lt;br&amp;gt;&lt;br /&gt;
# i2c_write_byte関数を使用して、指定したアドレスにデータを書き込む。&amp;lt;br&amp;gt;スタートコンディション、アドレスの送信、データの送信、ストップコンディションの順に処理を行う。&lt;br /&gt;
#: &amp;lt;br&amp;gt;&lt;br /&gt;
# i2c_read_byte関数を使用して、指定したアドレスからデータを読み出す。&amp;lt;br&amp;gt;スタートコンディション、アドレスの送信、再スタートコンディション、データの受信、ストップコンディションの順に処理を行う。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
実際に動作させる場合は、回路の接続や電源の供給等にも注意が必要である。&amp;lt;br&amp;gt;&lt;br /&gt;
特に、I2C通信では、SDAとSCLのラインに4.7[kΩ]～10[kΩ]のプルアップ抵抗を接続する必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430f149.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // 24LC256のI2Cアドレス&lt;br /&gt;
 // 24LC256のA0, A1, A2ピンがGNDに接続されている場合&lt;br /&gt;
 #define EEPROM_ADDRESS 0x50&lt;br /&gt;
 &lt;br /&gt;
 void i2c_init();&lt;br /&gt;
 void i2c_write_byte(unsigned int address, unsigned char data);&lt;br /&gt;
 unsigned char i2c_read_byte(unsigned int address);&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
    WDTCTL = WDTPW | WDTHOLD;  // ウォッチドッグタイマを停止&lt;br /&gt;
 &lt;br /&gt;
    // DCOクロック設定 (約8MHz)&lt;br /&gt;
    DCOCTL = DCO0 | DCO1 | DCO2;&lt;br /&gt;
    BCSCTL1 = RSEL0 | RSEL1 | RSEL2;&lt;br /&gt;
 &lt;br /&gt;
    i2c_init(); // I2Cの初期化&lt;br /&gt;
 &lt;br /&gt;
    unsigned char data = 0xAA;      // 書き込むデータ&lt;br /&gt;
    unsigned int address = 0x0010;  // EEPROMのメモリアドレス&lt;br /&gt;
 &lt;br /&gt;
    i2c_write_byte(address, data);  // EEPROMにデータを書き込み&lt;br /&gt;
 &lt;br /&gt;
    __delay_cycles(50000);          // 書き込み完了待機 (約5ms)&lt;br /&gt;
 &lt;br /&gt;
    unsigned char read_data = i2c_read_byte(address);  // EEPROMからデータを読み出し&lt;br /&gt;
 &lt;br /&gt;
    while(1);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void i2c_init()&lt;br /&gt;
 {&lt;br /&gt;
    P3SEL |= 0x0A;                      // P3.1(SDA)とP3.3(SCL)をI2C機能に割り当て&lt;br /&gt;
 &lt;br /&gt;
    U0CTL |= I2C | SYNC;                // I2Cモードを選択、同期モード&lt;br /&gt;
    U0CTL &amp;amp;= ~I2CEN;                    // I2Cモジュールを一時的に無効化&lt;br /&gt;
 &lt;br /&gt;
    I2CTCTL = I2CSSEL1;                 // SMCLK (サブマスタークロック) を選択&lt;br /&gt;
    I2CPSC = 0x00;                      // プリスケーラなし&lt;br /&gt;
    I2CSCLH = 0x50;                     // SCL高期間設定&lt;br /&gt;
    I2CSCLL = 0x50;                     // SCL低期間設定 (約100kHz)&lt;br /&gt;
 &lt;br /&gt;
    I2COA = 0x01A5;                     // 自身のアドレスを設定&lt;br /&gt;
    I2CSA = EEPROM_ADDRESS;             // スレーブアドレス (EEPROM) を設定&lt;br /&gt;
 &lt;br /&gt;
    U0CTL |= I2CEN;                     // I2Cモジュールを有効化&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void i2c_write_byte(unsigned int address, unsigned char data)&lt;br /&gt;
 {&lt;br /&gt;
    while (I2CDCTL &amp;amp; I2CBUSY);          // バスがアイドル状態になるまで待機&lt;br /&gt;
 &lt;br /&gt;
    I2CTCTL |= I2CTRX | I2CSTT;         // 送信モード、スタートコンディション生成&lt;br /&gt;
 &lt;br /&gt;
    while ((I2CIFG &amp;amp; TXRDYIFG) == 0);   // 送信準備完了待ち&lt;br /&gt;
    I2CDRB = (address &amp;gt;&amp;gt; 8) &amp;amp; 0xFF;     // アドレス上位バイトの送信&lt;br /&gt;
 &lt;br /&gt;
    while ((I2CIFG &amp;amp; TXRDYIFG) == 0);&lt;br /&gt;
    I2CDRB = address &amp;amp; 0xFF;            // アドレス下位バイトの送信&lt;br /&gt;
 &lt;br /&gt;
    while ((I2CIFG &amp;amp; TXRDYIFG) == 0);&lt;br /&gt;
    I2CDRB = data;                      // データの送信&lt;br /&gt;
 &lt;br /&gt;
    while ((I2CIFG &amp;amp; TXRDYIFG) == 0);&lt;br /&gt;
    I2CTCTL |= I2CSTP;                  // ストップコンディションの送信&lt;br /&gt;
 &lt;br /&gt;
    while (I2CDCTL &amp;amp; I2CBUSY);          // 転送完了まで待機&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 unsigned char i2c_read_byte(unsigned int address)&lt;br /&gt;
 {&lt;br /&gt;
    unsigned char data;&lt;br /&gt;
 &lt;br /&gt;
    while (I2CDCTL &amp;amp; I2CBUSY);          // バスがアイドル状態になるまで待機&lt;br /&gt;
 &lt;br /&gt;
    I2CTCTL |= I2CTRX | I2CSTT;         // 送信モード、スタートコンディション生成&lt;br /&gt;
 &lt;br /&gt;
    while ((I2CIFG &amp;amp; TXRDYIFG) == 0);&lt;br /&gt;
    I2CDRB = (address &amp;gt;&amp;gt; 8) &amp;amp; 0xFF;     // アドレス上位バイトの送信&lt;br /&gt;
 &lt;br /&gt;
    while ((I2CIFG &amp;amp; TXRDYIFG) == 0);&lt;br /&gt;
    I2CDRB = address &amp;amp; 0xFF;            // アドレス下位バイトの送信&lt;br /&gt;
 &lt;br /&gt;
    while (I2CTCTL &amp;amp; I2CSTT);           // スタートコンディション送信完了待ち&lt;br /&gt;
    &lt;br /&gt;
    I2CTCTL &amp;amp;= ~I2CTRX;                 // 受信モードに設定&lt;br /&gt;
    I2CTCTL |= I2CSTT;                  // 再スタートコンディション生成&lt;br /&gt;
 &lt;br /&gt;
    while (I2CTCTL &amp;amp; I2CSTT);           // スタートコンディション送信完了待ち&lt;br /&gt;
    I2CTCTL |= I2CSTP;                  // ストップコンディション設定&lt;br /&gt;
 &lt;br /&gt;
    while ((I2CIFG &amp;amp; RXRDYIFG) == 0);   // 受信完了まで待機&lt;br /&gt;
    data = I2CDRB;                      // 受信データの読み出し&lt;br /&gt;
 &lt;br /&gt;
    while (I2CDCTL &amp;amp; I2CBUSY);          // 転送完了まで待機&lt;br /&gt;
 &lt;br /&gt;
    return data;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 25LC640A (64Kbit SPI EEPROM) ====&lt;br /&gt;
以下の例では、SPI通信を使用してEEPROMとの通信を行っている。&amp;lt;br&amp;gt;&lt;br /&gt;
SPIの初期化後、eeprom_write_byte関数を使用してEEPROMにデータを書き込み、eeprom_read_byte関数を使用して書き込んだデータを読み出している。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
# spi_init関数でSPIの初期化を行う。&amp;lt;br&amp;gt;ピンの設定、SPIの設定、クロック周波数の設定等を行う。&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;MSP430F149マイコンのP3.1をSIMO、P3.2をSOMI、P3.3をUCLKに指定している。&lt;br /&gt;
#: &amp;lt;br&amp;gt;&lt;br /&gt;
# eeprom_write_byte関数を使用して、指定したアドレスにデータを書き込む。&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;WREN&amp;lt;/code&amp;gt;コマンドで書き込み有効化して、&amp;lt;code&amp;gt;WRITE&amp;lt;/code&amp;gt;コマンドでアドレスとデータを送信する。&lt;br /&gt;
#: &amp;lt;br&amp;gt;&lt;br /&gt;
# eeprom_read_byte関数を使用して、指定したアドレスからデータを読み出す。&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;READ&amp;lt;/code&amp;gt;コマンドでアドレスを送信して、データを受信する。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
実際に動作させる場合は、回路の接続や電源の供給等にも注意が必要である。&amp;lt;br&amp;gt;&lt;br /&gt;
特に、25LC640AのCS (チップセレクト) ピンは、適切なポートピンに接続して、ソースコード内で設定する必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430f149.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // CSピンの設定 (例: P3.0)&lt;br /&gt;
 #define EEPROM_CS_PIN BIT0&lt;br /&gt;
 #define CS_LOW()    P3OUT &amp;amp;= ~EEPROM_CS_PIN&lt;br /&gt;
 #define CS_HIGH()   P3OUT |= EEPROM_CS_PIN&lt;br /&gt;
 &lt;br /&gt;
 // SPI EEPROM命令コード&lt;br /&gt;
 #define EEPROM_CMD_READ     0x03&lt;br /&gt;
 #define EEPROM_CMD_WRITE    0x02&lt;br /&gt;
 #define EEPROM_CMD_WREN     0x06&lt;br /&gt;
 #define EEPROM_CMD_RDSR     0x05&lt;br /&gt;
 &lt;br /&gt;
 void spi_init();&lt;br /&gt;
 unsigned char spi_transfer(unsigned char data);&lt;br /&gt;
 void eeprom_write_byte(unsigned int address, unsigned char data);&lt;br /&gt;
 unsigned char eeprom_read_byte(unsigned int address);&lt;br /&gt;
 unsigned char eeprom_read_status();&lt;br /&gt;
 void eeprom_wait_ready();&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
    WDTCTL = WDTPW | WDTHOLD;       // ウォッチドッグタイマーを停止&lt;br /&gt;
 &lt;br /&gt;
    // DCOクロック設定 (約8MHz)&lt;br /&gt;
    DCOCTL = DCO0 | DCO1 | DCO2;&lt;br /&gt;
    BCSCTL1 = RSEL0 | RSEL1 | RSEL2;&lt;br /&gt;
 &lt;br /&gt;
    P3DIR |= EEPROM_CS_PIN;         // CSピンを出力に設定&lt;br /&gt;
    CS_HIGH();                      // CSピンをハイに設定&lt;br /&gt;
 &lt;br /&gt;
    spi_init();                     // SPIの初期化&lt;br /&gt;
 &lt;br /&gt;
    unsigned char data   = 0xAA;    // 書き込むデータ&lt;br /&gt;
    unsigned int address = 0x1000;  // EEPROMのメモリアドレス&lt;br /&gt;
 &lt;br /&gt;
    eeprom_write_byte(address, data);                    // EEPROMにデータを書き込み&lt;br /&gt;
 &lt;br /&gt;
    unsigned char read_data = eeprom_read_byte(address); // EEPROMからデータを読み出し&lt;br /&gt;
 &lt;br /&gt;
    while(1); // 無限ループ&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void spi_init()&lt;br /&gt;
 {&lt;br /&gt;
    P3SEL |= 0x0E;                      // P3.1, P3.2, P3.3をSPI機能に割り当て&lt;br /&gt;
 &lt;br /&gt;
    U0CTL = SWRST;                      // USARTをリセット状態に&lt;br /&gt;
    U0CTL |= CHAR | SYNC | MM;          // 8ビット、同期モード、マスタモード&lt;br /&gt;
 &lt;br /&gt;
    U0TCTL = CKPL | SSEL1 | STC;        // クロック極性、SMCLK選択、3ピンモード&lt;br /&gt;
 &lt;br /&gt;
    U0BR0 = 0x02;                       // ボーレート分周設定 (約4MHz)&lt;br /&gt;
    U0BR1 = 0x00;&lt;br /&gt;
    U0MCTL = 0x00;                      // 変調制御 (SPIでは未使用)&lt;br /&gt;
 &lt;br /&gt;
    ME1 |= USPIE0;                      // USARTモジュール有効化&lt;br /&gt;
    U0CTL &amp;amp;= ~SWRST;                    // USARTの動作を開始&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 unsigned char spi_transfer(unsigned char data)&lt;br /&gt;
 {&lt;br /&gt;
    while ((IFG1 &amp;amp; UTXIFG0) == 0);      // 送信バッファが空になるまで待機&lt;br /&gt;
    U0TXBUF = data;                     // データを送信バッファに書き込み&lt;br /&gt;
 &lt;br /&gt;
    while ((IFG1 &amp;amp; URXIFG0) == 0);      // 受信完了まで待機&lt;br /&gt;
    return U0RXBUF;                     // 受信データを返す&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 unsigned char eeprom_read_status()&lt;br /&gt;
 {&lt;br /&gt;
    unsigned char status;&lt;br /&gt;
 &lt;br /&gt;
    CS_LOW();                           // EEPROM選択&lt;br /&gt;
    spi_transfer(EEPROM_CMD_RDSR);      // ステータス読み込みコマンド送信&lt;br /&gt;
    status = spi_transfer(0xFF);        // ステータス値受信&lt;br /&gt;
    CS_HIGH();                          // EEPROM非選択&lt;br /&gt;
 &lt;br /&gt;
    return status;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void eeprom_wait_ready()&lt;br /&gt;
 {&lt;br /&gt;
    while (eeprom_read_status() &amp;amp; 0x01) // WIPビットが0になるまで待機&lt;br /&gt;
    {&lt;br /&gt;
       __delay_cycles(100);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void eeprom_write_byte(unsigned int address, unsigned char data)&lt;br /&gt;
 {&lt;br /&gt;
    eeprom_wait_ready();                // 前回の書き込み完了待機&lt;br /&gt;
 &lt;br /&gt;
    CS_LOW();                           // EEPROM選択&lt;br /&gt;
    spi_transfer(EEPROM_CMD_WREN);      // 書き込み有効化コマンド&lt;br /&gt;
    CS_HIGH();                          // EEPROM非選択&lt;br /&gt;
 &lt;br /&gt;
    __delay_cycles(100);                // 短い待機&lt;br /&gt;
 &lt;br /&gt;
    CS_LOW();                           // EEPROM選択&lt;br /&gt;
    spi_transfer(EEPROM_CMD_WRITE);     // 書き込みコマンド&lt;br /&gt;
    spi_transfer((address &amp;gt;&amp;gt; 8) &amp;amp; 0xFF); // アドレス上位バイト&lt;br /&gt;
    spi_transfer(address &amp;amp; 0xFF);       // アドレス下位バイト&lt;br /&gt;
    spi_transfer(data);                 // データ&lt;br /&gt;
    CS_HIGH();                          // EEPROM非選択&lt;br /&gt;
 &lt;br /&gt;
    eeprom_wait_ready();                // 書き込み完了待機&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 unsigned char eeprom_read_byte(unsigned int address)&lt;br /&gt;
 {&lt;br /&gt;
    unsigned char data;&lt;br /&gt;
 &lt;br /&gt;
    eeprom_wait_ready();                // 書き込み完了待機&lt;br /&gt;
 &lt;br /&gt;
    CS_LOW();                           // EEPROM選択&lt;br /&gt;
    spi_transfer(EEPROM_CMD_READ);      // 読み出しコマンド&lt;br /&gt;
    spi_transfer((address &amp;gt;&amp;gt; 8) &amp;amp; 0xFF); // アドレス上位バイト&lt;br /&gt;
    spi_transfer(address &amp;amp; 0xFF);       // アドレス下位バイト&lt;br /&gt;
    data = spi_transfer(0xFF);          // データ受信&lt;br /&gt;
    CS_HIGH();                          // EEPROM非選択&lt;br /&gt;
 &lt;br /&gt;
    return data;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== AT24C32 (32Kbit I2C EEPROM) ====&lt;br /&gt;
AT24C32 EEPROMを使用してI2C通信する場合は、上記の24LC256のサンプルプログラムとほぼ同じとなる。&amp;lt;br&amp;gt;&lt;br /&gt;
これは、AT24C32と24LC256がどちらもI2Cインターフェースを使用しており、通信プロトコルが同一だからである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
主な違いは、EEPROMの容量とアドレッシングである。&amp;lt;br&amp;gt;&lt;br /&gt;
* 24LC256は、256[Kbit] (32[KB]) の容量を持ち、16ビットのアドレス (0x0000～0x7FFF) を使用する。&lt;br /&gt;
* AT24C32は、32[Kbit] (4[KB]) の容量を持ち、12ビットのアドレス (0x000～0xFFF) を使用する。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
AT24C32のアドレッシングは2バイトで行われるが、有効なアドレス範囲は0x000～0xFFFであり、上位4ビットは無視される。&amp;lt;br&amp;gt;&lt;br /&gt;
したがって、24LC256向けのサンプルコードをそのままAT24C32で使用することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ただし、EEPROMの容量が異なるため、アドレスの範囲に注意が必要である。&amp;lt;br&amp;gt;&lt;br /&gt;
AT24C32の有効なアドレス範囲は、&amp;lt;u&amp;gt;0x000～0xFFF&amp;lt;/u&amp;gt;であり、それ以外のアドレスを指定した場合の動作は未定義となることに注意する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
また、EEPROMのI2Cアドレスを確認して、必要に応じて、EEPROM_ADDRESSの定義を変更する必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
AT24C32のデフォルトのI2Cアドレスは0x50 (A0、A1、A2がGNDに接続されている場合) だが、実装により異なる場合がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 注意事項 ==&lt;br /&gt;
MSP430F149マイコンを使用してEEPROMと通信する場合には、以下に示す事柄に注意する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== 共通 ====&lt;br /&gt;
* 電源電圧&lt;br /&gt;
*: EEPROMの動作電圧範囲を確認し、MSP430F149の電源電圧と一致していることを確認する。&lt;br /&gt;
* デカップリングコンデンサ&lt;br /&gt;
*: EEPROMの電源ピンの近くに、0.1[μF]のデカップリングコンデンサを配置する。&lt;br /&gt;
* 配線長&lt;br /&gt;
*: I2CおよびSPIの信号線は、できるだけ短く、かつノイズの影響を受けにくいように配線する。&lt;br /&gt;
* エラー処理&lt;br /&gt;
*: 実際のアプリケーションでは、通信エラーや書き込みエラーに対する適切なエラー処理を実装する必要がある。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== I2C通信 ====&lt;br /&gt;
* プルアップ抵抗&lt;br /&gt;
*: I2CのSDAとSCLのラインには、必ず外部プルアップ抵抗 (4.7[kΩ]～10[kΩ]) を接続する必要がある。&lt;br /&gt;
* クロック周波数&lt;br /&gt;
*: I2C通信のクロック周波数は、標準モードで100[kHz]、高速モードで400[kHz]までサポートされている。&lt;br /&gt;
* 書き込み完了時間&lt;br /&gt;
*: EEPROMへの書き込み後、内部書き込みサイクルが完了するまで約5[ms]の待機時間が必要である。&lt;br /&gt;
* アドレッシング&lt;br /&gt;
*: 16ビットアドレスのEEPROMでは、アドレスを2バイトで送信する必要がある。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== SPI通信 ====&lt;br /&gt;
* チップセレクト制御&lt;br /&gt;
*: SPI通信では、通信前にCS信号をLOWに、通信後にHIGHにする必要がある。&lt;br /&gt;
* クロック極性と位相&lt;br /&gt;
*: SPIのクロック極性と位相は、EEPROMのデータシートに従って設定する必要がある。&lt;br /&gt;
* 書き込み有効化&lt;br /&gt;
*: EEPROMへの書き込み前に、必ずWRENコマンドで書き込みを有効化する必要がある。&lt;br /&gt;
* ステータス確認&lt;br /&gt;
*: 書き込み操作後、ステータスレジスタを読み取り、WIPビットが0になるまで待機する必要がある。&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki&lt;br /&gt;
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,MSP430F149,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板&lt;br /&gt;
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux&lt;br /&gt;
|image=/resources/assets/MochiuLogo_Single_Blue.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:MSP430]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>