• 検索結果がありません。

入出力ポートなどと同様に

TWB_PortWrite()

TWB_PortRead()

関数を使用して、書込み、読出し が行えます。

Port

引数には表 70の値を指定してください。

表 70 ユーザーステータスレジスタを指定する定数

言語 説明

C/C++ TWB_USER_STATUS

ユーザーステータスレジスタの読み書き時に指定します。

C++ TWB::WPORT::USER_STATUS TWB::RPORT::USER_STATUS VB/VBA TWB_WPORT.USER_STATUS

TWB_RPORT.USER_STATUS C# TWB.WPORT.USER_STATUS TWB.RPORT.USER_STATUS

ユーザーメモリの操作方法

TWB_PortBRead()

TWB_PortBWrite()

関数(表 65、表 66)を使用すると、大きなデータを効率良 くリード/ライトできます。これらの関数では

Port

引数にアドレス、

nData

引数にバイト数を指定してデ バイス上の任意のメモリアドレスにアクセスできます。

• ユーザーメモリ以外の領域に対して読み書きを行うと、誤動作する場合があります。

• ユーザーメモリはユーザーファームの動作にも使用します。ユーザーファーム利用時には自由に使 用できる領域が変化しますので誤って操作しないように特に注意が必要です。

63

フラッシュメモリの利用

製品にはフラッシュメモリが内蔵されています。フラッシュメモリは電源を切っても記録した情報が保 存される不揮発性のメモリ空間で、製品が動作するためのファームウェアもこの領域に書き込まれて います。図 20はフラッシュメモリ領域を詳しく示した図です。

フラッシュメモリは消去単位毎に

EB0~EB15

16

ブロックに分けて管理されます。このうち、EB1

~EB3の

12K

バイトの領域がユーザーに開放されています。電源を切っても内容が消えないため、

アプリケーション固有の設定情報やキャリブレーションデータの保存などに利用可能です。

EB0(システムで使用)

EB1 EB2 EB3 EB4(システムで使用) EB5(システムで使用) EB6(システムで使用) EB7(システムで使用)

EB8-EB11 (システムで使用)

EB12-EB15 (ユーザーファーム用) H’000000

H’000FFF H’001000 H’001FFF H’002000 H’002FFF H’003000 H’003FFF H’004000

H’007FFF H’008000

H’03FFFF H’040000

H’07FFFF

4KB×8

224KB

256KB

図 20 フラッシュメモリマップ

表 71 フラッシュメモリの操作に使用する関数

モード 関数名 説明

フラッシュ書換えモード で使用する関数

TWB_FlashEraseBlk() フラッシュ書換えモード用。フラッシュメモリの指定ブロッ

クを消去します。

TWB_FlashWrite() フラッシュ書換えモード用。フラッシュメモリに書込みを行

います。

TWB_FlashRead() フラッシュ書換えモード用。フラッシュメモリからデータを

読み出します。

ユーザープログラムモ ードで使用する関数

TWB_UPFlashAttachWriter()

ユーザープログラムモード用。フラッシュメモリの消去/

書込みのためのファームウェアをデバイスにダウンロード します。

TWB_UPFlashEraseBlk() ユーザープログラムモード用。フラッシュメモリの指定ブロ

ックを消去します。

TWB_UPFlashWrite() ユーザープログラムモード用。フラッシュメモリに書込みを

行います。

TWB_PortBRead() ユーザープログラムモード用。フラッシュメモリからデータ

を読み出します。

64

表 72 フラッシュメモリ操作のサンプルプログラム

開発環境 プロジェクト名またはファイル名 説明

Visual C++ (MFC) FlashSample フラッシュ書換えモードのデバイスに接続し、フラッシュメモ

リの状態表示、ファイルデータのフラッシュメモリへの書込 みを行います。

Visual Basic FlashSampleVB Viusal C# FlashSampleCS

VBA FlashSample.xls

セルを利用した簡易バイナリエディタです。編集内容をフラ ッシュメモリに書き込むことができます。フラッシュ書換えモ ード用です。

Visual C++ (MFC) UPFlashSample ユーザープログラムモードのデバイスに接続し、フラッシュ

メモリの状態表示、ファイルデータのフラッシュメモリへの書 込みを行います。

Visual Basic UPFlashSampleVB Viusal C# UPFlashSampleCS

フラッシュメモリへの書込み操作は特殊で、通常のメモリのように

1

バイト単位でデータを書き込むこ とはできません。書込みを行う領域には、まず消去の操作を行います。消去の単位は図 20 に示し た

EB1~EB3

のブロック単位で、消去対象のブロックは全ビットが"1"となります。

続いて、実際に保存するデータの書込み行います。書込みは

128

バイト毎のブロック単位で行いま す。そのため、書込みの先頭アドレスは常に

128

バイト境界(アドレスの下位

7

ビットが

0)となります。

• フラッシュメモリの書換え可能回数の目安は

100

回、データ保持年数は

10

年です。

『USBM3069(F)』、『LANM3069』で、フラッシュメモリを操作するには、フラッシュ書換えモードに設 定する必要があります。その他のデバイスではフラッシュ書換えモードとユーザープログラムモード のどちらかでフラッシュメモリを操作します。それぞれのモードで使用できる関数が異なりますのでご 注意ください。

フラッシュメモリの消去方法(フラッシュ書換えモード) 1. デバイスをフラッシュ書換えモードで起動します。

2.

Opt

引数に

TWB_MODE_FLASH

(相当のオプション) を指定して

TWB_Open()

、 または、

TWB_OpenByAddress()

関数でデバイスに接続します。

3.

TWB_FlashEraseBlk()

関数を呼び出します。

Blk

引数に消去したいブロック番号(1~3)を指定し

ます。

表 73 TWB_FlashEraseBlk() の関数宣言

言語 関数宣言

C/C++ TW_STATUS TWB_FlashEraseBlk(TW_HANDLE hDev, long Blk) VB Function TWB_FlashEraseBlk(ByVal hDev As System.IntPtr,

ByVal Blk As Integer) As Integer

VBA Function TWB_FlashEraseBlk(ByVal hDev As Long, ByVal Blk As Long) As Long C# STATUS FlashEraseBlk(System.IntPtr hDev, int Blk)

65

フラッシュメモリの読出し、および、書込み方法(フラッシュ書換えモード) 1. デバイスをフラッシュ書換えモードで起動します。

2.

Opt

引数に

TWB_MODE_FLASH

(相当のオプション)を指定して

TWB_Open()

、 または、

TWB_OpenByAddress()

関数でデバイスに接続します。

3. フラッシュ書換えモードのデバイスからデータを読み出すには

TWB_FlashRead()

関数を使用す る必要があります。

Address

引数には書込み先のアドレスとして 0x1000~0x3f80 の値が指定でき ますが、128 バイト境界に合わせる必要がありますので、下位 7 ビットは常に 0 になります。また、

nData

引数に指定する書込みバイト数も128の倍数としてください。

表 74 TWB_FlashRead() の関数宣言

言語 関数宣言

C/C++ TW_STATUS TWB_FlashRead(TW_HANDLE hDev, DWORD Address, void *pData, long nData) VB Function TWB_FlashRead(ByVal hDev As System.IntPtr, ByVal Address As Integer,

ByVal pData As Object, ByVal nData As Integer) As Integer VBA Function TWB_FlashRead(ByVal hDev As Long, ByVal Address As Long,

ByRef pData As Any, ByVal nData As Long) As Long C# SATUS FlashRead(System.IntPtr hDev, uint Address, object pData, int nData)

4. フラッシュメモリに書込みを行うには

TWB_FlashWrite()

関数を呼び出します。

Address

引数には 書込み先のアドレスとして 0x1000~0x3f80 の値が指定できますが、128 バイト境界に合わせる必 要がありますので、下位7ビットは常に0になります。また、

nData

引数に指定する書込みバイト数も 128の倍数としてください。

表 75 TWB_FlashWrite() の関数宣言

言語 関数宣言

C/C++ TW_STATUS TWB_FlashWrite(TW_HANDLE hDev, DWORD Address, void *pData, long nData) VB Function TWB_FlashWrite(ByVal hDev As System.IntPtr, ByVal Address As Integer,

ByVal pData As Object, ByVal nData As Integer) As Integer VBA Function TWB_FlashWrite(ByVal hDev As Long, ByVal Address As Long,

ByRef pData As Any, ByVal nData As Long) As Long C# SATUS FlashWrite(System.IntPtr hDev, uint Address, object pData, int nData)

66

リスト 32 フラッシュ書換えモードでのフラッシュメモリ操作例(C言語)

TW_HANDLE hDev;

char cWrite[128] = "Hello World";

char cRead[128];

//フラッシュ書換えモードのデバイスに接続

TWB_Open(&hDev, NULL, 0, TWB_IF_ANY | TWB_MODE_FLASH);

if(m_hDev){

//ブロック1を消去

TWB_FlashEraseBlk(hDev, 1);

//書込み

TWB_FlashWrite(hDev, 0x1000, cWrite, 128);

//読出し

TWB_FlashRead(hDev, 0x1000, cRead, 128);

OutputDebugStringA(cRead);

TWB_Close(hDev);

}

リスト 33 フラッシュ書換えモードでのフラッシュメモリ操作例(Visual Basic) Dim hDev As System.IntPtr

Dim strWrite As New System.Text.StringBuilder("Hello World") Dim bBuff(127) As Byte

strWrite.Length = 128

'フラッシュ書換えモードのデバイスに接続

TWB_Open(hDev, Nothing, 0, TWB_OPEN_OPT.IF_ANY Or TWB_OPEN_OPT.MODE_FLASH)

If hDev <> System.IntPtr.Zero Then

'ブロック1を消去

TWB_FlashEraseBlk(hDev, 1)

'書込み

TWB_FlashWrite(hDev, &H1000, strWrite, 128)

'読出し

TWB_FlashRead(hDev, &H1000, bBuff, 128)

Debug.WriteLine(System.Text.Encoding.GetEncoding(932).GetString(bBuff, 0, 128))

TWB_Close(hDev) End If

67

リスト 34 フラッシュ書換えモードでのフラッシュメモリ操作例(C#)

System.IntPtr hDev;

StringBuilder strWrite = new System.Text.StringBuilder("Hello World");

byte[] bBuff = new byte[128];

strWrite.Length = 128;

//フラッシュ書換えモードのデバイスに接続

TWB.Open(out hDev, null, 0, TWB.OPEN_OPT.IF_ANY | TWB.OPEN_OPT.MODE_FLASH);

if (hDev != System.IntPtr.Zero) {

//ブロック1を消去

TWB.FlashEraseBlk(hDev, 1);

//書込み

TWB.FlashWrite(hDev, 0x1000, strWrite, 128);

//読出し

TWB.FlashRead(hDev, 0x1000, bBuff, 128);

Debug.WriteLine(System.Text.Encoding.GetEncoding(932).GetString(bBuff, 0, 128));

TWB.Close(hDev);

}

フラッシュメモリの消去方法(ユーザープログラムモード)

ユーザープログラムモードでフラッシュメモリの消去/書込みを行う際には、予めフラッシュメモリを 制御するためのファームウェアをデバイスにダウンロードする必要があります。このファームウェアは ユーザーメモリ(61 ページ参照)にダウンロードされますので、ユーザーメモリは一時的に使用できな くなり、内部のデータも破壊されてしまいますので注意してください。

1. デバイスをユーザープログラムモードに変更します。通常モードからユーザープログラムモードへの 変更は起動後に行うこともできます。

2. 通常モードと同様の手順でデバイスに接続します。

3.

TWB_UPFlashAttachWriter()

関数を呼び出します。

4. 消去したいブロック番号(1~3)を引数として、

TWB_UPFlashEraseBlk()

関数を呼び出します。

68

フラッシュメモリへの書込み方法(ユーザープログラムモード)

1. デバイスをユーザープログラムモードに変更します。通常モードからユーザープログラムモードへの 変更は起動後に行うこともできます。

2. 通常モードと同様の手順でデバイスに接続します。

3.

TWB_UPFlashAttachWriter()

関数を呼びます。

4.

TWB_UPFlashWrite()

関 数を呼び 出し ます 。

Address

引数に は書込 み先のア ド レスとし て

0x1000~0x3f80の値が指定できますが、128バイト境界に合わせる必要がありますので、下位7ビ ットは常に0です。また、

nData

引数に指定する書込みバイト数も128の倍数としてください。

ユーザープログラムモードでのフラッシュメモリの読出しは、通常モードのメモリ読出しと同様に

TWB_PortBRead()

関数で行うことができます。

リスト 35 ユーザープログラムモードでのフラッシュメモリ操作例(C言語)

char cWrite[128] = "Hello World";

char cRead[128];

//ファームウェアのダウンロード TWB_UPFlashAttachWriter(hDev);

//ブロック1を消去

TWB_UPFlashEraseBlk(hDev, 1);

//書込み

TWB_UPFlashWrite(hDev, 0x1000, cWrite, 128);

//読出し

TWB_PortBRead(hDev, 0x1000, cRead, 128);

OutputDebugStringA(cRead);

リスト 36 ユーザープログラムモードでのフラッシュメモリ操作例(Visual Basic) Dim strWrite As New System.Text.StringBuilder("Hello World")

Dim bBuff(127) As Byte

strWrite.Length = 128

'ファームウェアのダウンロード TWB_UPFlashAttachWriter(hDev)

'ブロック1を消去

TWB_UPFlashEraseBlk(hDev, 1)

'書込み

TWB_UPFlashWrite(hDev, &H1000, strWrite, 128)

'読出し

TWB_PortBRead(hDev, &H1000, bBuff, 128)

Debug.WriteLine(System.Text.Encoding.GetEncoding(932).GetString(bBuff, 0, 128))

69

リスト 37 ユーザープログラムモードでのフラッシュメモリ操作例(C#)

StringBuilder strWrite = new System.Text.StringBuilder("Hello World");

byte []bBuff = new byte[128];

strWrite.Length = 128;

//ファームウェアのダウンロード TWB.UPFlashAttachWriter(hDev);

//ブロック1を消去

TWB.UPFlashEraseBlk(hDev, 1);

//書込み

TWB.UPFlashWrite(hDev, 0x1000, strWrite, 128);

//読出し

TWB.PortBRead(hDev, 0x1000, bBuff, 128);

Debug.WriteLine(System.Text.Encoding.GetEncoding(932).GetString(bBuff, 0, 128));

70

エラー処理

TWB

ライブラリの関数のほとんどは戻り値で関数の実行結果を返します。本リファレンスのプログラ ム例は要点を分かりやすくするために、関数の戻り値チェックを省略していますが、実際のプログラ ムでは関数が正しく実行されたかどうかチェックすることを推奨します。

関数の戻り値についての詳細は「関数リファレンス」(72ページ)を参照してください。

リスト 38 エラー処理の例(C言語)

TW_STATUS ret;

ret = TWB_PortWrite(hDev, TWB_POUT, 0x00, 0xff);

if(ret){

TWB_Close(hDev);

hDev = 0;

printf("エラーが発生しました。TW_STATUS = %08X(HEX), ret);

return ret;

}

リスト 39 エラー処理の例(C++、MFC) CString str;

TW_STATUS ret;

ret = TWB_PortWrite(hDev, TWB::WPORT::POUT, 0x00);

if(ret){

TWB_Close(hDev);

hDev = 0;

str.Format(_T("エラーが発生しました。TW_STATUS=%08X(HEX)"), ret);

AfxMessageBox(str);

return ret;

}

リスト 40 エラー処理の例(Visual Basic) Dim ret As Integer

ret = TWB_PortWrite(hDev, TWB_WPORT.POUT, &H0)

If ret <> TW_STATUS.TW_OK Then TWB_Close(hDev)

hDev = System.IntPtr.Zero

MsgBox(String.Format("エラーが発生しました。TW_STATUS = {0:X8}(HEX)", ret)) Exit Sub

End If