概要 †
- FeliCa RC-S620Sを使って暗号化されていないブロックを読み込む
詳細 †
- RC-S620Sはスイッチサイエンスで購入可能
- RC-S620Sの技術資料はSONYのサイトで公開されている
- ArduinoでFelicaを読み取るサンプル
- ただし、上記のサンプルだとIDmぐらいしか読み取れない。暗号化されていないブロックを読むためには、RC-S620Sのコマンドリファレンスに書かれている「CommunicateThruEX」コマンドを使用してFelicaカードのコマンドを発行する必要がある
- 「CommunicateThruEX」コマンドは上記のサンプルの「RCS620S::cardCommand」で送れる
- FelicaカードのコマンドはFelicaカードユーザーズマニュアルに記載されている
- 上記のマニュアルの「Read Without Encryptionコマンド」を使用すれば暗号化されていないブロックを読むことができる
- サンプルコードは下Interface 2012 4月号の特集 FeliCaリーダを使った電子マネー表示システムの製作が参考になる
- 「balance_reader_src\target\frk_rx62n_hew\balance_reader\balance_reader\read_iccard.c」の下記のコードで大丈夫そう
/*!
* \brief Read Without Encryptionコマンド処理
* \param idm [in] 対象FeliCaカードのIDm
* \param sio [in] サービスコード
* \param bid [in] ブロック番号
* \param data [out] 読み出したブロックデータの格納療育
* \retval true コマンド成功
* \retval false コマンド失敗
* \note 同時読み出しブロック/サービス数は1に限定している
*/
static bool_t
read_without_encryption
(IDM idm , uint16_t sid , uint8_t bid , ICCARD_BLOCK_DATA *data)
{
uint8_t command[READWITHOUTENC_LEN];
uint8_t response[INCOMMTHRU_BUFSIZE(28 + 1)];
bool_t ret = false;
/* コマンドの作成 */
command[0] = READWITHOUTENC_LEN;
command[1] = COMMAND_READWITHOUTENC;
command[2] = (uint8_t)((idm.high >> 24u) & 0xffu);
command[3] = (uint8_t)((idm.high >> 16u) & 0xffu);
command[4] = (uint8_t)((idm.high >> 8u) & 0xffu);
command[5] = (uint8_t)((idm.high >> 0u) & 0xffu);
command[6] = (uint8_t)((idm.low >> 24u) & 0xffu);
command[7] = (uint8_t)((idm.low >> 16u) & 0xffu);
command[8] = (uint8_t)((idm.low >> 8u) & 0xffu);
command[9] = (uint8_t)((idm.low >> 0u) & 0xffu);
command[10] = 1; /* サービスは1つ */
command[11] = (uint8_t)((sid >> 0u) & 0xffu);
command[12] = (uint8_t)((sid >> 8u) & 0xffu);
command[13] = 1; /* ブロック数は1つ */
command[14] = 0x80U;
command[15] = bid;
if(rc_s620_incommunicatethru(command , response ,
READWITHOUTENC_LEN , INCOMMTHRU_BUFSIZE(28)) == true)
{
/* 読みだしたデータをコピー */
memcpy(data->data , &response[13] , 16);
ret = true;
}
return ret;
}
Total:6098 / Today:1 / Yesterday:0