Monthly Archives: 9月 2014

RC-S620/SをFeliCaカードに成りきらせて好きなIDmで応答するようにする

IMG_3999
※ ArduinoとRC-S620/Sの接続については(ArduinoでRELET(FeliCa電子マネー残高照会機)モドキを作ろう)で図を描いているのでそちらを参考にしてください。

ライブラリの拡張

公式で提供されているArduino用ライブラリを拡張する必要があります。

RCS620S.h 29行目付近に追加

int tginit(const uint8_t* idm);

RCS620S.cpp 80行目付近に追加

int RCS620S::tginit(const uint8_t* idm)
{
    uint8_t  response[RCS620S_MAX_RW_RESPONSE_LEN];
    uint16_t responseLen;

    /* TgInitTarget command parts */
    uint8_t command[RCS620S_MAX_RW_RESPONSE_LEN] = {0x00};
    uint8_t param_1[ 9] = {0xd4, 0x8c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40};
    uint8_t param_2[10] = {0xff};

    /* Make TgInitTarget command */
    memcpy(&command[ 0], param_1,  9);
    memcpy(&command[ 9], idm,      8);
    memcpy(&command[17], param_2, 10);
    memcpy(&command[27], idm,      8);

    /* Execute TgInitTarget */
    rwCommand(command, 41, response, &responseLen);

    return 1;
}

スケッチの作成

Arduino側のスケッチ

#include <RCS620S.h>
#include <string.h>

RCS620S rcs620s;

void setup()
{
  int ret;

  Serial.begin(115200);
  ret = rcs620s.initDevice();
  while (!ret) {}
}

void loop()
{
  int ret;
  
  // SET IDm
  ret = rcs620s.tginit((const uint8_t*)"\x08\x07\x06\x05\x04\x03\x02\x01");
  rcs620s.rfOff();
}