Armadilloフォーラム

A640+BT/THオプションでのSE050へのアクセスでエラー

ishiitk

2022年8月2日 19時45分

BT/THオプションに実装されているセキュアエレメント SE050 へのアクセスを試みていますが、うまく動きません。
問題ありそうな点などご教示いただけますでしょうか。

- BT/THオプションを接続した状態で起動
- GPIO28をHighに設定

root@armadillo:~# cat /sys/class/gpio/gpio28/direction
out
root@armadillo:~# cat /sys/class/gpio/gpio28/value
1

i2cdetect では 0x48 のアドレスを検出

root@armadillo:~# i2cdetect -y 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

しかしながら、ツールでのアクセスでは失敗します

root@armadillo:~/se05x_mw_v04.02.00_20220701_151557/simw-top_build/imx_native_se050_t1oi2c_openssl_el2go# bin/se05x_Minimal /dev/i2c-3:0x48
App   :INFO :PlugAndTrust_v04.02.00_20220524
App   :INFO :Running bin/se05x_Minimal
App   :INFO :Using PortName='/dev/i2c-3:0x48' (CLI)
smCom :ERROR:Failed writing data (nrWritten=-1).
 
smCom :ERROR: - Error in I2C Write.....
smCom :ERROR:phNxpEseProto7816_SendRawFrame Error phNxpEse_WriteFrame
smCom :ERROR:TransceiveProcess Transceive send failed, going to recovery!
smCom :ERROR:phNxpEseProto7816_Open failed
smCom :ERROR: Failed to Open session
sss   :ERROR:SM_I2CConnect Failed. Status 7012
App   :ERROR:sss_session_open failed
App   :ERROR:ex_sss_session_open Failed
App   :ERROR:!ERROR! ret != 0.
root@armadillo:~/se05x_mw_v04.02.00_20220701_151557/simw-top_build/imx_native_se050_t1oi2c_openssl_el2go# se05x_getkey 0xF0000111 devcert.pem /dev/i2c-3:0x48
App   :INFO :Running se05x_getkey
App   :INFO :Using PortName='/dev/i2c-3:0x48' (CLI)
smCom :ERROR:Failed writing data (nrWritten=-1).
 
smCom :ERROR: - Error in I2C Write.....
smCom :ERROR:phNxpEseProto7816_SendRawFrame Error phNxpEse_WriteFrame
smCom :ERROR:TransceiveProcess Transceive send failed, going to recovery!
smCom :ERROR:phNxpEseProto7816_Open failed
smCom :ERROR: Failed to Open session
sss   :ERROR:SM_I2CConnect Failed. Status 7012
App   :ERROR:sss_session_open failed
コメント

at_shiita.ishigaki

2022年8月4日 13時37分

石垣です。

> BT/THオプションに実装されているセキュアエレメント SE050 へのアクセスを試みていますが、うまく動きません。

BT/TH オプションに実装されているセキュエレメントは SE050 ではなく A71CH となります。

> - GPIO28をHighに設定

A71CH のリセットピンと接続されている A640 の GPIO は GPIO3_IO28 であり、
GPIO3_IO28 = (3-1) * 32 + 28 = 92 より、設定する GPIO は GPIO92 となります。
デフォルトの dtb では GPIO92 はユーザーランドからレベルを変化させることができませんが、
dtb で正しくリセットピンとして設定してありますので、ユーザーランドからレベルを変化させる必要はありません。

A71CH のデモに関するドキュメントは以下のファイルから確認することができます。

se05x_mw_v04.02.00_20220701_151557/simw-top/doc/a71ch/a71ch_miscellaneous.html

se05x_mw_v04.02.00_20220701_151557/simw-top/doc/demos/demo-list.html から A71CH に対応しているデモを確認することができ、
実行されていた、bin/se05x_* は A71CH では対応していないようです。

以下の手順で imx_native_a7x_sci2c/bin/ex_a71ch_sss_ecc の動作は確認できました。
※引数で与える i2c のディレクトリがプログラムに渡っていなかったため、直接値を編集しました。

[armadillo ~/se05x_mw_v04.02.00_20220701_151557]# vi simw-top/hostlib/hostLib/platform/linux/i2c_a7.c
 
static char* default_axSmDevice_name = "/dev/i2c-3"; // /dev/i2c-1 から変更
 
[armadillo ~/se05x_mw_v04.02.00_20220701_151557]# cd simw-top_build/imx_native_a7x_sci2c
[armadillo ~/se05x_mw_v04.02.00_20220701_151557/simw-top_build/imx_native_a7x_sci2c]# cmake -DPTMW_Applet:STRING=A71CH -DPTMW_SMCOM:STRING=SCI2C . # cmake で使用するパラメータを変更
[armadillo ~/se05x_mw_v04.02.00_20220701_151557/simw-top_build/imx_native_a7x_sci2c]# cmake --build .
[armadillo ~/se05x_mw_v04.02.00_20220701_151557/simw-top_build/imx_native_a7x_sci2c]# bin/ex_a71ch_sss_ecc
App   :INFO :PlugAndTrust_v04.02.00_20220524
App   :INFO :Running bin/ex_a71ch_sss_ecc
App   :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command 
line arguments.
smCom :INFO :I2CInit: opening /dev/i2c-3
 
smCom :INFO :I2C driver: PEC flag cleared
 
smCom :INFO :I2C driver supports plain i2c-level commands.
 
smCom :INFO :I2C driver supports Read Block.
 
smCom :INFO :selectResponseData (Len=2)
      01 31 
App   :INFO :Running Mixed SSS/A71CH Host API Elliptic Curve Cryptography Example ex_a71ch_sss_ecc.c
sss   :DEBUG:sss_key_store_set_key(@EF000074, cipherType=kSSS_CipherType_EC_NIST_P, keyBitLen=256)
App   :INFO :Do Signing
App   :INFO :digest (Len=32)
      48 65 6C 6C    6F 20 57 6F    72 6C 64 00    00 00 00 00 
      00 00 00 00    00 00 00 00    00 00 00 00    00 00 00 00 
App   :INFO :signature (Len=70)
      30 44 02 20    4F 9C BF 21    71 6A B0 EE    8E A1 1C FC 
      1B DD 4E DC    E1 AF 67 AC    96 78 E3 C1    23 22 93 1F 
      E2 8A 70 BF    02 20 57 3B    3A 43 37 FC    FF 2C 46 FC 
      AA 7A 21 01    01 96 03 8B    1B F7 ED F3    C3 49 B8 BB 
      D6 C6 3A B6    98 40 
App   :INFO :Signing Successful !!!
sss   :DEBUG:sss_key_store_set_key(@EF000094, cipherType=kSSS_CipherType_EC_NIST_P, keyBitLen=256)
App   :INFO :Do Verify
App   :INFO :digest (Len=32)
      48 65 6C 6C    6F 20 57 6F    72 6C 64 00    00 00 00 00 
      00 00 00 00    00 00 00 00    00 00 00 00    00 00 00 00 
App   :INFO :signature (Len=70)
      30 44 02 20    4F 9C BF 21    71 6A B0 EE    8E A1 1C FC 
      1B DD 4E DC    E1 AF 67 AC    96 78 E3 C1    23 22 93 1F 
      E2 8A 70 BF    02 20 57 3B    3A 43 37 FC    FF 2C 46 FC 
      AA 7A 21 01    01 96 03 8B    1B F7 ED F3    C3 49 B8 BB 
      D6 C6 3A B6    98 40 
App   :INFO :Verification Successful !!!
App   :INFO :A71_GetPublicKeyEccKeyPair(0x00)
App   :INFO :Pub Key from pair (Len=65)
      04 ED A7 E9    0B F9 20 CF    FB 9D F6 DB    CE F7 20 E1 
      23 8B 3C EE    84 86 D2 50    E4 DF 30 11    50 1A 15 08 
      A6 2E D7 49    52 78 63 6E    61 E8 5F ED    B0 6D 87 92 
      0A 04 19 14    FE 76 63 55    DF BD 68 61    59 31 8E 68 
      7C 
App   :INFO :ex_a71ch_sss_ecc Example Success !!!...
App   :INFO :ex_sss Finished

石垣様

回答ありがとうございます!
チップ情報ありがとうございます。誤認識しておりました。
GPIOの番号計算方法も参考になりました。

ご教示いただいた手順で動作確認とれました!ありがとうございます。