> English version: [README.md](README.md) # sigrok_iso7816_stream πŸ“’ Новости ΠΈ обновлСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: [Π‘Π°ΠΉΡ‚](https://atroshin.ru) Β· [Telegram-ΠΊΠ°Π½Π°Π»](https://t.me/youeyeseesee) Π€ΠΎΡ€ΠΊ [svenso/sigrok_iso7816](https://github.com/svenso/sigrok_iso7816) с **ΠΆΠΈΠ²Ρ‹ΠΌ GSMTAP-UDP-стримингом**: Π΄Π΅ΡˆΡ‘Π²Ρ‹ΠΉ логичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ FX2 (ΠΊΠ»ΠΎΠ½ Saleae) Π²Π΅Π΄Ρ‘Ρ‚ сСбя ΠΊΠ°ΠΊ сниффСр SIMtrace2: ``` SIM-ΠΊΠ°Ρ€Ρ‚Π° ⇄ Ρ€ΠΈΠ΄Π΅Ρ€ (пассивный ΡΡŠΡ‘ΠΌ с ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ²) β†’ логичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ FX2 (fx2lafw, 8 ΠΊΠ°Π½Π°Π»ΠΎΠ², Π΄ΠΎ 24 ΠœΠ“Ρ†) β†’ sigrok-cli + Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ iso7816 β†’ GSMTAP UDP :4729 β†’ [SIMtrace Analyser](https://github.com/anttro/simtrace-analyser) / Wireshark ``` [SIMtrace Analyser](https://github.com/anttro/simtrace-analyser) β€” Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ инструмСнт для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΆΠΈΠ²Ρ‹Ρ… трасс ΠΈ просмотра сохранённых записСй; ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ GSMTAP pcap-Ρ„Π°ΠΉΠ»Ρ‹ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ PCAP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ этот Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ ΠΏΠΈΡˆΠ΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ†ΠΈΡŽ `pcap_file=`). ## Установка ΠΈ запуск Оба способа ставят ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ β€” Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠ΄ΠΈΠ½: - **Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ (рСкомСндуСтся)** β€” Π°Ρ€Ρ…ΠΈΠ² Ρ€Π΅Π»ΠΈΠ·Π°. НС Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π΅Ρ‚ истории git: распакуйтС, запуститС `setup`, Π·Π°Ρ‚Π΅ΠΌ `start`. Π›ΡƒΡ‡ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Ссли Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΡŠΡ‘ΠΌ. - **Из исходников** β€” `git clone`. Π’ΠΎΡ‚ ΠΆΠ΅ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ плюс ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: `tests/` ΠΈ инструмСнты трасс ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ (`tools/capture_baseline.sh`, `tools/compare_baseline.sh`, `tools/vs_reader.py`). Врассы ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² (`examples/`) ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΈΠ· git ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π’ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ… Ρ€Π΅Π»ΠΈΠ·Π° Π½Π΅Ρ‚ `tests/`, dev-инструмСнтов ΠΈ `examples/`. ### Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ (рСкомСндуСтся) Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ послСдний Π°Ρ€Ρ…ΠΈΠ² со страницы [Releases](https://github.com/anttro/sigrok_iso7816_stream/releases/latest): - `sigrok_iso7816_stream-.tar.gz` β€” Linux - `sigrok_iso7816_stream-.zip` β€” Windows К ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π΅Π»ΠΈΠ·Ρƒ прилагаСтся `SHA256SUMS` β€” Π² Π½Ρ‘ΠΌ **ΠΎΠ±Π°** Π°Ρ€Ρ…ΠΈΠ²Π°. ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» рядом со скачанным Π°Ρ€Ρ…ΠΈΠ²ΠΎΠΌ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅: ```bash sha256sum -c --ignore-missing SHA256SUMS # GNU coreutils (Linux) ``` Π’ Windows Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ `certutil -hashfile sigrok_iso7816_stream-.zip SHA256` ΠΈ сравнитС Π²Ρ‹Π²ΠΎΠ΄ со строкой `.zip` Π² `SHA256SUMS`. #### Linux (ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ) ```bash tar xzf sigrok_iso7816_stream-.tar.gz cd sigrok_iso7816_stream- ./setup.sh ./start.sh ``` `setup.sh` провСряСт, Ρ‡Ρ‚ΠΎ установлСны sigrok-cli ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ FX2 (`sigrok-firmware-fx2lafw`), создаёт симлинк ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² `~/.local/share/libsigrokdecode/decoders/iso7816` (ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ систСмныС) ΠΈ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠ΅ устройство Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ максимальной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ частоты дискрСтизации. #### Windows (ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ) ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования: 1. **sigrok-cli** β€” установщик для Windows (0.7.2 x86_64) с [sigrok.org/wiki/Downloads](https://sigrok.org/wiki/Downloads) β€” протСстированная вСрсия. На этой ΠΆΠ΅ страницС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ Π½ΠΎΡ‡Π½Ρ‹Π΅ сборки для Windows; ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ синтаксис sigrok-cli ΠΈΠ»ΠΈ API Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ΠΎΠ², поэтому ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ остаётся вСрсия ΠΈΠ· Ρ€Π΅Π»ΠΈΠ·Π½ΠΎΠ³ΠΎ установщика 0.7.2. Если sigrok-cli Π½Π΅ запускаСтся с ошибкой `0xc0150002`, установитС [Visual C++ 2010 Redistributable](https://www.microsoft.com/en-us/download/details.aspx?id=26999) (`msvcr100.dll` трСбуСтся встроСнному Python-Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΡƒ). 2. ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° fx2lafw поставляСтся вмСстС с установщиком β€” ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Настройка Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° (Π΄ΠΎΠ½Π³Π»Π°ΠΌ FX2 Π½ΡƒΠΆΠ΅Π½ WinUSB, вСндорский Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚): - ЗапуститС **Zadig**, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅ΠΆΠΈΡ‚ *Π²Π½ΡƒΡ‚Ρ€ΠΈ* ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° установки sigrok-cli (Ρ‚Π°ΠΊΠΆΠ΅ доступСн ΠΈΠ· мСню Β«ΠŸΡƒΡΠΊΒ»). Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ устройство FX2 Π² Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΌ спискС ΠΈ установитС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ **WinUSB**. - ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ устройство ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ VID/PID β€” Ссли ΠΎΠ½ΠΎ всё Π΅Ρ‰Ρ‘ Π½Π΅ находится, запуститС Zadig **Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·** для ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ устройства. - Windows привязываСт Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΊ USB-ΠΏΠΎΡ€Ρ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‚ сСрийного Π½ΠΎΠΌΠ΅Ρ€Π°: пСрСнос Π΄ΠΎΠ½Π³Π»Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ€Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Zadig. Π—Π°Ρ‚Π΅ΠΌ распакуйтС Π°Ρ€Ρ…ΠΈΠ² `.zip` (Π² ΠŸΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠ΅: ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ β†’ Β«Π˜Π·Π²Π»Π΅Ρ‡ΡŒ всС») ΠΈ запуститС Π² распакованном ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅: ```bat setup.bat start.bat ``` `setup.bat` провСряСт sigrok-cli ΠΈ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ, рСгистрируСт Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· junction Π² `%LOCALAPPDATA%\libsigrokdecode\decoders\iso7816` (подтвСрТдаСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ `sigrok-cli -L` ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ `iso7816`), ΠΈ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ устройство Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… частот дискрСтизации. Π’ zip-Π°Ρ€Ρ…ΠΈΠ²Π΅ Ρ€Π΅Π»ΠΈΠ·Π° bat-Ρ„Π°ΠΉΠ»Ρ‹ ΡƒΠΆΠ΅ с ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌΠΈ строк CRLF, поэтому ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ трСбуСтся. `start.bat --help` пСрСчисляСт Π΅Π³ΠΎ ΠΎΠΏΡ†ΠΈΠΈ (основноС подмноТСство `start.sh`: ΠΊΠ°Π½Π°Π»Ρ‹, частота дискрСтизации, clock, host/port, pcap, protocol, debug). ### Из исходников #### Linux (ΠΈΠ· исходников) ```bash git clone git@github.com:anttro/sigrok_iso7816_stream.git cd sigrok_iso7816_stream ./setup.sh ./start.sh ``` `setup.sh` выполняСт Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ создаёт Ρ‚ΠΎΡ‚ ΠΆΠ΅ симлинк, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅. #### Windows (ΠΈΠ· исходников) ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования Windows (sigrok-cli ΠΈ Visual C++ 2010 Redistributable, встроСнная ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° fx2lafw ΠΈ настройка Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Zadig/WinUSB) β€” Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ [Windows (ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ)](#windows-ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ) Π²Ρ‹ΡˆΠ΅. ```bat git clone git@github.com:anttro/sigrok_iso7816_stream.git cd sigrok_iso7816_stream setup.bat start.bat ``` `setup.bat` выполняСт Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ junction, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅. `start.bat` ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ основноС подмноТСство ΠΎΠΏΡ†ΠΈΠΉ; основной Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ β€” с ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ, `--clk=CH` Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ (`start.bat --help` пСрСчисляСт ΠΎΠΏΡ†ΠΈΠΈ): ```bat start.bat --clk D1 --data D6 ``` ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: bat-Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² строк CRLF; Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ слСдит Π·Π° этим Ρ‡Π΅Ρ€Π΅Π· `.gitattributes`, поэтому свСТий ΠΊΠ»ΠΎΠ½ Π² Windows ΡƒΠΆΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½ (zip-Π°Ρ€Ρ…ΠΈΠ² Ρ€Π΅Π»ΠΈΠ·Π° содСрТит Ρ‚Π΅ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ с CRLF). ## ИспользованиС `start.sh` ΠΏΠΈΡˆΠ΅Ρ‚ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° частотС 16 ΠœΠ“Ρ† Π΄ΠΎ Ctrl+C (`rc=130`) ΠΈ стримит GSMTAP Π½Π° 127.0.0.1:4729. Умолчания: Π²Ρ‹Π²ΠΎΠ΄Ρ‹ D5=CLK, D0=I/O, D4=RST, D2=VCC. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ: ```bash ./start.sh --clk=D1 --data=D6 # Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ./start.sh --no-rst --no-vcc # Ρ‚ΠΎΠ»ΡŒΠΊΠΎ CLK+I/O ./start.sh --host=10.0.28.7 # ΡΡ‚Ρ€ΠΈΠΌΠΈΡ‚ΡŒ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ./start.sh --pcap=session.pcap # Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ события Π² PCAP ./start.sh --debug # ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ sigrok (всС # строки Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ + libsigrok -l 4); # ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ # Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ APDU ΠΈ прСдупрСТдСния/ошибки ``` Π’ Windows `start.bat` ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ основноС подмноТСство ΠΎΠΏΡ†ΠΈΠΉ (Ρ„ΠΎΡ€ΠΌΠ° с ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ; Ρ„ΠΎΡ€ΠΌΠ° `--opt=value` Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚) β€” см. Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΠΎ установкС Windows Π²Ρ‹ΡˆΠ΅. ### ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ способ ΡΡŠΡ‘ΠΌΠ° β€” ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ кабСль с внСшними ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ рСзисторами (см. Ρ€Π°Π·Π΄Π΅Π» Β«Π‘ΡŠΡ‘ΠΌ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅Β» Π½ΠΈΠΆΠ΅): 10 кОм ΠΊ GND Π½Π° VCC (тянСт Π²Π½ΠΈΠ· Π±Π΅Π· питания) ΠΈ 47 кОм ΠΊ VCC Π½Π° DATA (быстрСС Ρ„Ρ€ΠΎΠ½Ρ‚ Π²Π²Π΅Ρ€Ρ…). Π•Π³ΠΎ распиновка **фиксирована ΠΈ извСстна Π·Π°Ρ€Π°Π½Π΅Π΅** β€” см. Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ «Распиновка» Π½ΠΈΠΆΠ΅ β€” ΠΈ Π² точности совпадаСт с умолчаниями `start.sh` (`D5`=CLK, `D0`=I/O, `D4`=RST, `D2`=VCC). АвтодСтСкт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ Π½ΡƒΠΆΠ΅Π½; Π²Ρ‹Π²ΠΎΠ΄Ρ‹ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. > **Π‘Π½Π°Ρ‡Π°Π»Π° GND.** Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ GND ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΅Π³ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ > (ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΈΠ»ΠΈ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ исправным ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠΌ) β€” ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ»ΠΈ > ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ Π·Π΅ΠΌΠ»ΠΈ маскируСтся ΠΏΠΎΠ΄ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ нСисправности сразу: > ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΈ, Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½Ρ‹Π΅ стартовыС Π±ΠΈΡ‚Ρ‹, ΠΊΠ°Π΄Ρ€Ρ‹ ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ… Π½ΡƒΠ»Π΅ΠΉ. ### Распиновка ΠšΠ°Π½Π°Π»Ρ‹ ΠΊΠ»ΠΎΠ½Π° FX2 Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· `-P iso7816:clk=N:data=N:rst=N:vcc=N`. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ ΡΡŠΡ‘ΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ ΠΊΠ°Π±Π΅Π»Π΅ΠΌ (с внСшними ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ рСзисторами) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ фиксированныС Π²Ρ‹Π²ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² точности ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с умолчаниями `start.sh`; `--clk`/`--data`/`--rst`/`--vcc` ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΈΡ…, Ссли Π²Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅: | Канал FX2 | ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚ SIM | Π‘ΠΈΠ³Π½Π°Π» | |-------------|-------------|--------| | D0 | C7 | I/O | | D2 | C1 | VCC (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ!) | | D4 | C2 | RST | | D5 | C3 | CLK | | GND | C5 | GND | Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ€ΠΎΠ³ FX2 Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ TTL (~1.4 Π’): ΠΊΠ°Ρ€Ρ‚Ρ‹ класса 1.8 Π’ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ; классы 3 Π’/5 Π’ β€” Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. **Частота дискрСтизации ΠΈ 8-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ (Π²Π°ΠΆΠ½ΠΎ):** Π½ΠΎΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ 24 ΠœΠ“Ρ† FX2 доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ дискрСтизации Π² 8-Π±ΠΈΡ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ρ‚.Π΅. ΠΊΠΎΠ³Π΄Π° **Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°Π½Π°Π»Ρ‹ D0–D7**. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ 9-Π³ΠΎ ΠΊΠ°Π½Π°Π»Π° (A0/Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Π½Π° ΠΊΠ»ΠΎΠ½Π°Ρ… CWAV AX) ΠΈΠ»ΠΈ любого Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ сбор Π² 16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ libsigrok ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ 12 ΠœΠ“Ρ†. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ `start.sh`/`start.bat` явно ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ `-C D0,D1,D2,D3,D4,D5,D6,D7` ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ **16 ΠœΠ“Ρ†** (с ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½Ρ‹ΠΌ запасом ΠΏΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠ»ΠΊΠΎΠΌ USB 24 ΠœΠ“Ρ†; ~3.3 отсчёта Π½Π° Ρ‚Π°ΠΊΡ‚ CLK 4.8 ΠœΠ“Ρ†). `setup.sh`/`setup.bat` ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ фактичСский максимум вашСго ΠΆΠ΅Π»Π΅Π·Π° ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ. ### Π Π΅ΠΆΠΈΠΌΡ‹ CLK - `native` (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) β€” ΠΆΠΈΠ²Ρ‹Π΅ записи. Π”Π΅ΠΊΠΎΠ΄Π΅Ρ€ отслСТиваСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ скорости ΠΏΠΎ PPS ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ взводится ΠΏΠΎ RST, поэтому Ρ‚Ρ‘ΠΏΠ»Ρ‹Π΅ сбросы ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ послС PPS Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. - `detect` β€” для ΠΎΡ„Π»Π°ΠΉΠ½-экспСримСнтов ΠΈΠ»ΠΈ записСй Π±Π΅Π· PPS. Он Π½Π΅ отслСТиваСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ PPS, поэтому Ρ‚Ρ€Π°Ρ„ΠΈΠΊ послС PPS ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Π½Π΅Π²Π΅Ρ€Π½ΠΎ. - `sample_as_clock` β€” ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ upstream; для ΡΡŠΡ‘ΠΌΠ° SIM Π½Π΅ рСкомСндуСтся. ### РСшСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ ΠΆΠΈΠ²ΠΎΠΉ записи **Π—Π°ΠΏΠΈΡΡŒ обрываСтся Ρ€Π°Π½ΠΎ (особСнно Π² Windows).** Частая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° β€” нСподходящий Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ USB. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ Saleae Logic Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Saleae Logic software; sigrok Π½ΡƒΠΆΠ΅Π½ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ **WinUSB**. УстановитС Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· **Zadig** (Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² установщик sigrok-cli) ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послС ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ устройства с VID/PID ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ sigrok: - https://sigrok.org/wiki/Windows#Drivers - https://sigrok.org/wiki/Fx2lafw **Устройство Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ / Π½Π΅Ρ‚ сигнала.** ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ WinUSB (Windows), ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ fx2lafw, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ GND (см. Β«ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅Β»), ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ USB-ΠΏΠΎΡ€Ρ‚ ΠΈ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ исправный кабСль. Π”Π΅ΡˆΡ‘Π²Ρ‹Π΅ USB-ΠΊΠ°Π±Π΅Π»ΠΈ ΠΈ Ρ…Π°Π±Ρ‹ β€” частая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° остановок. **Π—Π°ΠΏΠΈΡΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ сама (`rc=0`).** FX2 упираСтся Π² ΠΏΠΎΡ‚ΠΎΠ»ΠΎΠΊ пропускной способности USB Π½Π° высокой частотС дискрСтизации. Π‘Π½ΠΈΠ·ΡŒΡ‚Π΅ `--samplerate`, ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Ρ…Π°Π±ΠΎΠ², Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ USB-Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. `start.sh` автоматичСски пСрСзапускаСт запись ΠΏΡ€ΠΈ `rc=0` (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 20 пСрСзапусков с ΠΏΠ°ΡƒΠ·ΠΎΠΉ 2 с; `--no-loop`, `--max-restarts=N`, `--restart-delay=S`). ΠŸΡ€ΠΈ `--pcap=FILE` ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пСрСзапуск ΠΏΠΈΡˆΠ΅Ρ‚ `FILE..`. `start.sh` Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄ΠΎ Ctrl+C; наТатия клавиш Π΅Π³ΠΎ Π½Π΅ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ (ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ Β«Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒΒ» ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ). ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ: ```bash ./start.sh --pcap=s.pcap --log=s.log # Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ события ΠΈ Π²Π΅Ρ€Π΄ΠΈΠΊΡ‚ rc= ./start.sh ... --samplerate=24M # большС запаса ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠΈΠ½Π³Ρƒ ΠΏΡ€ΠΈ нСобходимости ./start.sh ... --klog # Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΆΡƒΡ€Π½Π°Π» ядра ./start.sh ... --debug # ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ sigrok ``` - `--log` сохраняСт строку Π²Π΅Ρ€Π΄ΠΈΠΊΡ‚Π° `rc=` Π² ΠΊΠΎΠ½Ρ†Π΅ сСссии. - Π”Π΅ΠΊΠΎΠ΄Π΅Ρ€ ΠΏΠΈΡˆΠ΅Ρ‚ `SIGNAL INTEGRITY WARNING`, ΠΊΠΎΠ³Π΄Π° β‰₯ 8 ΠΈΠ· послСдних 64 ΠΊΠ°Π΄Ρ€ΠΎΠ² Π½Π΅ проходят ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ чётности. - ДСсинхронизированныС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ с Ρ„Π»Π°Π³ΠΎΠΌ `GSMTAP_FLAG_BAD_FCS` Π² Π±Π°ΠΉΡ‚Π΅ `res` Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° GSMTAP β€” Π²ΠΈΠ΄Π½ΠΎ Π² Wireshark ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ BAD-FCS. ### Π‘Ρ‹Ρ€Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ sigrok-cli Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±Π΅Π· скриптов-ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ: ```bash # ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ: Ρ‚ΠΎΠ»ΡŒΠΊΠΎ CLK+I/O, ΠΆΠΈΠ²ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° localhost:4729 sigrok-cli -d fx2lafw --config samplerate=12M --continuous \ -P iso7816:clk=D0:data=D1:clock_option=detect -A iso7816 # ПолноС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: CLK + I/O + RST + VCC с отслСТиваниСм событий Π»ΠΈΠ½ΠΈΠΉ sigrok-cli -d fx2lafw --config samplerate=12M --continuous \ -P iso7816:clk=D5:data=D0:rst=D4:vcc=D2:clock_option=native:rst_detect=true:vcc_detect=true \ -A iso7816 # ΠŸΠΎΡ‚ΠΎΠΊ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ / ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ стриминг / ΠΏΠΈΡΠ°Ρ‚ΡŒ PCAP-Ρ„Π°ΠΉΠ» ... -P iso7816:...:gsmtap_host=10.0.28.7 ... ... -P iso7816:...:gsmtap_enable=false ... ... -P iso7816:...:pcap_file=trace.pcap ... # ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ upstream: Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ PCAP Π² stdout sigrok-cli -i capture.sr -P iso7816:clk=2:data=0 -B iso7816=pcap > out.pcap ``` ## Π‘ΡŠΡ‘ΠΌ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ![ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹](resources/components.jpg) *ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² сборкС* ![Π’ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠΌ](resources/in_action_phone.jpg) *Π‘Ρ‚Π΅Π½Π΄ снимаСт сСссию SIM-ΠΊΠ°Ρ€Ρ‚Ρ‹ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°* ![Π’ Ρ€Π°Π±ΠΎΡ‚Π΅](resources/in_action.jpg) *Π‘Ρ‚Π΅Π½Π΄ снимаСт сСссию ΠΊΠ°Ρ€Ρ‚Ρ€ΠΈΠ΄Π΅Ρ€Π°* ![ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΈΠΊ для SIM](resources/sim_adapter.jpg) *ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΈΠΊ для ΡΡŠΡ‘ΠΌΠ° с SIM* ![Распиновка ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΈΠΊΠ°](resources/sim_adapter_pinout.jpg) *ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°ΠΌ SIM* ![ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ кабСль](resources/short_cable.jpg) *Π‘ΡŠΡ‘ΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ ΠΊΠ°Π±Π΅Π»Π΅ΠΌ β€” мСньшС ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ² Ρ„Ρ€ΠΎΠ½Ρ‚Π°* ![ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ кабСля](resources/short_cable_wiring.jpg) *Π”Π΅Ρ‚Π°Π»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ кабСля* ![Обвязка ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ кабСля](resources/short_cable_gear.jpg) *ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ кабСль с обвязкой* ![ΠŸΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ рСзисторы](resources/short_cable_pull_resistors.jpg) *ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ кабСль с внСшними ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ рСзисторами β€” 10 кОм ΠΊ GND Π½Π° VCC (тянСт Π²Π½ΠΈΠ·, ΠΊΠΎΠ³Π΄Π° питания Π½Π΅Ρ‚), 47 кОм ΠΊ VCC Π½Π° DATA (быстрСС Ρ„Ρ€ΠΎΠ½Ρ‚ Π²Π²Π΅Ρ€Ρ…)* ## ВозмоТности | Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ | ОписаниС | |---------|-------------| | Π–ΠΈΠ²ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ GSMTAP | КаТдоС Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ событиС отправляСтся ΠΊΠ°ΠΊ GSMTAP-SIM UDP-ΠΏΠ°ΠΊΠ΅Ρ‚ (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, повторяСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ simtrace2-sniff) | | ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ sub_types | ATR=0x01 ΠΈ PPS=0x02 ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² PCAP | | ATR/PPS Π² PCAP | ATR ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹Π΅ запрос+ΠΎΡ‚Π²Π΅Ρ‚ PPS выводятся ΠΊΠ°ΠΊ PCAP-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ | | ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ RST (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) | `rst_detect=true`: события assert/deassert сброса (sub_type 0x10) | | ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ VCC (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) | `vcc_detect=true`: события Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ питания (sub_type 0x11) | | PCAP сразу Π² Ρ„Π°ΠΉΠ» | `pcap_file=` ΠΏΠΈΡˆΠ΅Ρ‚ PCAP Π±Π΅Π· пСрСнаправлСния Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ | | Π”Π΅Π³Π»ΠΈΡ‚Ρ‡ стартового Π±ΠΈΡ‚Π° | ΠŸΠΎΠ΄Π°Π²Π»ΡΠ΅Ρ‚ LOW-Π³Π»ΠΈΡ‚Ρ‡ΠΈ ΠΊΠΎΡ€ΠΎΡ‡Π΅ ETU (2 отсчёта ΠΏΡ€ΠΈ 16 ΠœΠ“Ρ†, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‚ частоты дискрСтизации) | | Π—Π°Ρ…Π²Π°Ρ‚ ETU Π² сСрСдинС сСссии | ВосстанавливаСт ETU ΠΏΠΎ Π»ΠΈΠ½ΠΈΠΈ DATA, ΠΊΠΎΠ³Π΄Π° CLK Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½; ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, Π½Π΅ ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ чётности, измСряСтся Π·Π°Π½ΠΎΠ²ΠΎ | | Π—Π°Ρ‰ΠΈΡ‚Π° ATR / рСсинхронизации | ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ ATR, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½ΠΎ ΠΊΠ°Π΄Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Ρ‹ ΠΈ выравниваСтся послС дСсинхронизации | | Π˜Π½Π²Π΅Ρ€ΡΠ½Π°Ρ конвСнция | ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΡΠΌΡƒΡŽ (TS=0x3B) ΠΈ ΠΈΠ½Π²Π΅Ρ€ΡΠ½ΡƒΡŽ (TS=0x3F) ΠΊΠ°Ρ€Ρ‚Ρ‹ | | Π‘Π»ΠΎΠΊΠΈ T=1 | Π Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ NAD/PCB/LEN/INF/LRC с Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ ΠΏΠΎ Π±ΠΈΡ‚Ρƒ M; INF I-Π±Π»ΠΎΠΊΠ° выдаётся ΠΊΠ°ΠΊ APDU | | Π€Π»Π°Π³ чётности | ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ с ошибкой чётности ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ `GSMTAP_FLAG_BAD_FCS` | | ΠŸΠΎΡ€ΠΎΠ³ΠΈ ΠΎΡ‚ частоты | ΠŸΠΎΡ€ΠΎΠ³ΠΈ Π΄Π΅Π³Π»ΠΈΡ‚Ρ‡Π°, Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΈ ETU ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ частоты дискрСтизации | ## ΠžΠΏΡ†ΠΈΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π° | ΠžΠΏΡ†ΠΈΡ | По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | ОписаниС | |--------|---------|-------------| | `clock_option` | `native` | `native`, `detect`, `sample_as_clock` (см. FAQ upstream) | | `protocol` | `auto` | `auto`, `T=0`, `T=1` | | `gsmtap_enable` | `true` | Π–ΠΈΠ²ΠΎΠΉ GSMTAP UDP-стриминг | | `gsmtap_host` | `127.0.0.1` | Π₯ост назначСния GSMTAP | | `gsmtap_port` | `4729` | ΠŸΠΎΡ€Ρ‚ назначСния GSMTAP | | `pcap_file` | *(пусто)* | ΠŸΠΈΡΠ°Ρ‚ΡŒ PCAP Π² этот Ρ„Π°ΠΉΠ» Π²Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄Ρƒ | | `rst_detect` | `false` | ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ события ΠΏΠΈΠ½Π° RST (трСбуСтся Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» `rst`) | | `vcc_detect` | `false` | ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ события ΠΏΠΈΠ½Π° VCC (трСбуСтся Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» `vcc`) | ΠšΠ°Π½Π°Π»Ρ‹: `clk`, `data` (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅); `rst`, `vcc` (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ β€” Π½Π°Π·Π½Π°Ρ‡Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ физичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½). ## Бобытия GSMTAP Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ GSMTAP: вСрсия 2, Ρ‚ΠΈΠΏ SIM (0x04), UDP-ΠΏΠΎΡ€Ρ‚ 4729. | sub_type | Имя | ПолСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° | |----------|------|---------| | 0x00 | APDU | сырыС Π±Π°ΠΉΡ‚Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚Π° T=0/T=1 | | 0x01 | ATR | сырыС Π±Π°ΠΉΡ‚Ρ‹ ATR | | 0x02 | Запрос PPS | сырыС Π±Π°ΠΉΡ‚Ρ‹ запроса PPS | | 0x03 | ΠžΡ‚Π²Π΅Ρ‚ PPS | сырыС Π±Π°ΠΉΡ‚Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚Π° PPS | | 0x10 | Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ RST (кастомноС) | `[direction, level, flags, clk_hz_be32]` β€” частота CLK добавляСтся, ΠΊΠΎΠ³Π΄Π° извСстна | | 0x11 | Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ VCC (кастомноС) | `[direction, level, 0x00]` | Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° Π±Π°ΠΉΡ‚ΠΎΠ² ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ: - RST: `direction` 1 = сброс asserted (высокий→низкий), 0 = deasserted (низкий→высокий); `level` = ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π»ΠΈΠ½ΠΈΠΈ послС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°. - VCC: `direction` 1 = ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π°Π½ΠΎ (низкий→высокий), 0 = снято (высокий→низкий); `level` = ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π»ΠΈΠ½ΠΈΠΈ послС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°. 0x00–0x03 ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с gsmtap.h ΠΈΠ· libosmocore: стандартныС значСния ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (запрос ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ PPS ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ). 0x10/0x11 β€” кастомныС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π² gsmtap.h ΠΈΠ· libosmocore. Бобытия RST нСсут ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½Π½ΡƒΡŽ частоту CLK, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° извСстна: Ρ‚ΠΎΠ³Π΄Π° устанавливаСтся Π±ΠΈΡ‚ 0 Π±Π°ΠΉΡ‚Π° `flags`, Π° слСдом ΠΈΠ΄Ρ‘Ρ‚ частота ΠΊΠ°ΠΊ big-endian uint32 Π² Π³Π΅Ρ€Ρ†Π°Ρ… (полСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° 7 Π±Π°ΠΉΡ‚). Пока частота Π½Π΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½Π°, Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° остаётся 3 Π±Π°ΠΉΡ‚Π°, поэтому ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Π±Π°ΠΉΡ‚Π°, Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ΡΡ. ВмСстС с F/D, согласованными Π² ATR/PPS, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π²Π½Π° `clk_hz Γ— D / F` Π±ΠΈΡ‚/с. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°: Ρ„Π»Π°Π³ΠΈ Π²Ρ€ΠΎΠ΄Π΅ `GSMTAP_FLAG_BAD_FCS` ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π² Π±Π°ΠΉΡ‚ `res` Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ gsmtap.h ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ (RFU). Π­Ρ‚ΠΎ собствСнноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π° (upstream simtrace2-sniff Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ заполняСт `res`); сСмантика Ρ„Π»Π°Π³ΠΎΠ² повторяСт Ρ„Π»Π°Π³ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (data flags) USB-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° simtrace2 ΠΈ Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ спСцификации libosmocore. ## Π—Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ ограничСния ΠΏΠΎ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ RST/VCC - Бобытия Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ **асинхронно Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ATR** (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ питания / снятиС сброса Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ стабилизируСтся) ΠΈ **Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²** ΠΌΠ΅ΠΆΠ΄Ρƒ T=0/T=1 Π² дальнСйшСм. - Π€Ρ€ΠΎΠ½Ρ‚Ρ‹, происходящиС Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ *Π²Π½ΡƒΡ‚Ρ€ΠΈ* ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π½Π°Π±Π»ΡŽΠ΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ уровня Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅; ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΡ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹. - VCC β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ: Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ Π²ΠΈΠ΄ΠΈΡ‚ Β«ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ Π΅ΡΡ‚ΡŒ/Π½Π΅Ρ‚Β», Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ класс напряТСния (1.8/3/5 Π’). - **RST ΠΈ VCC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ гистСрСзис ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ уровня 10 мс** (ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‚ частоты дискрСтизации): Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сообщаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ стабилСн β‰₯ 10 мс. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ питания *симмСтричными* ΠΈ подавляСт Π·Π²ΠΎΠ½ ΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Π³Π»ΠΈΡ‚Ρ‡ΠΈ. - **Бобытия VCC Π² Ρ†Π΅Π»ΠΎΠΌ Π½Π΅Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ β€” Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ VCC.** ΠŸΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΠΈΠ½ ΡΡŠΡ‘ΠΌΠ° VCC всСгда читаСтся ΠΊΠ°ΠΊ HIGH (логичСская Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π±Π΅Π· Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ), поэтому Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ постоянно Π²ΠΈΠ΄ΠΈΡ‚ Β«ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π°Π½ΠΎΒ» ΠΈ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Π»ΠΎΠΆΠ½Ρ‹Π΅ события питания ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Ρ€Π΅Π±Π΅Π·Π³Π΅. Если ваш ΡΡŠΡ‘ΠΌ Π½Π΅ Π±Π΅Ρ€Ρ‘Ρ‚ VCC с чистого Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ источника, Π»ΡƒΡ‡ΡˆΠ΅ **ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°Π½Π°Π» `vcc` Π½Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ** (Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ `--vcc`) ΠΈ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ `vcc_detect=false`; отслСТивания RST ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ сбросы. Π’ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ отслСТиваниС VCC Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡΡŠΡ‘ΠΌΠ΅ с Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ΠΌ VCC (ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌ GND β€” см. Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ). - НСназначСнныС ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Π΄Π°ΠΆΠ΅ Ссли `rst_detect`/`vcc_detect` Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ (Π·Π°Ρ‰ΠΈΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· `has_channel()`). ## Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстированиС Π”Π΅ΠΊΠΎΠ΄Π΅Ρ€ провСряСтся Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… записСй с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `tools/vs_reader.py`. Ѐикстуры трасс хранятся локально ΠΈ Π½Π΅ входят Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. ### ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠΎ SDK Ρ€ΠΈΠ΄Π΅Ρ€Π° (`tools/vs_reader.py`) На ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ стСндС (PCSC-Ρ€ΠΈΠ΄Π΅Ρ€ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ софта) эталонный ΠΆΡƒΡ€Π½Π°Π» APDU ΠΈΠ· SDK Ρ€ΠΈΠ΄Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ PCAP: ```bash sigrok-cli -i .sr \ -P iso7816:clk=D5:data=D0:rst=D4:vcc=D2:clock_option=native:rst_detect=true:vcc_detect=true:gsmtap_enable=false:pcap_file=out.pcap \ -A iso7816 python3 tools/vs_reader.py .log out.pcap ``` `vs_reader.py` Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΠΌΠ΅Π½ ΠΈΠ· ΠΆΡƒΡ€Π½Π°Π»Π° Ρ€ΠΈΠ΄Π΅Ρ€Π° с APDU ΠΈΠ· записи (ΠΏΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ΅ LCS-совпадСниС) ΠΈ классифицируСт остатки ΠΊΠ°ΠΊ proactive/CAT (Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ для SDK Ρ€ΠΈΠ΄Π΅Ρ€Π°), pre-capture/потСрянныС ΠΈΠ»ΠΈ мусор. ### Записи Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎΠ³ΠΎ старта (запись начинаСтся Π΄ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ питания) Когда запись начинаСтся Π΄ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ питания, RST всё Π΅Ρ‰Ρ‘ Π½ΠΈΠ·ΠΊΠΈΠΉ Π½Π° отсчётС 0. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `rst_detect=true` ΠΈ `protocol=T=0`; Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ Π²Π·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΡ…ΠΎΡ‚Ρƒ Π·Π° ATR ΠΏΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ RST ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ATR. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ```bash sigrok-cli -i .sr \ -P iso7816:clk=CLK:data=DATA:rst=RST:vcc=VCC:clock_option=native:protocol=T=0:rst_detect=true:vcc_detect=true:gsmtap_enable=false:pcap_file=out.pcap \ -A iso7816 ``` ### Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ записи: Ρ€ΠΈΠ΄Π΅Ρ€ (постоянный CLK) ΠΈ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ (Clock Stop Mode) - **Π—Π°ΠΏΠΈΡΡŒ Ρ€ΠΈΠ΄Π΅Ρ€Π° / постоянный CLK** β€” Ρ€ΠΈΠ΄Π΅Ρ€ Π²Π΅Π΄Ρ‘Ρ‚ Ρ€ΠΎΠ²Π½Ρ‹ΠΉ CLK всю сСссию. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ Π΅Ρ‘ ΠΏΠΎ SDK Ρ€ΠΈΠ΄Π΅Ρ€Π° Ρ‡Π΅Ρ€Π΅Π· `tools/vs_reader.py .log out.pcap`. - **Π—Π°ΠΏΠΈΡΡŒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° / Π³Π΅ΠΉΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ остановлСнный CLK** β€” Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ Π³Π΅ΠΉΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ»ΠΈ останавливаСт CLK ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π°ΠΌΠΈ (Clock Stop Mode), поэтому ETU нСльзя вывСсти ΠΈΠ· CLK. ЗапускайтС с `protocol=T=0`; Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ восстанавливаСт ETU ΠΈΠ· Π»ΠΈΠ½ΠΈΠΈ DATA ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ edge-list Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΌ. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ T=0 case 3/4 (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `80 12`/`80 14` STK envelope) ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ APDU ΠΊΠΎΠΌΠ°Π½Π΄Π°β†’ΠΎΡ‚Π²Π΅Ρ‚. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹: ```bash # Π—Π°ΠΏΠΈΡΡŒ Ρ€ΠΈΠ΄Π΅Ρ€Π° (ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ стСнд, CLK всСгда Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚) sigrok-cli -i .sr \ -P iso7816:clk=CLK:data=DATA:rst=RST:vcc=VCC:clock_option=native:rst_detect=true:vcc_detect=true:gsmtap_enable=false:pcap_file=out.pcap \ -A iso7816 python3 tools/vs_reader.py .log out.pcap # Π—Π°ΠΏΠΈΡΡŒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° (сСрСдина сСссии, Π³Π΅ΠΉΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ/остановлСнный CLK) sigrok-cli -i .sr \ -P iso7816:clk=CLK:data=DATA:rst=RST:clock_option=native:rst_detect=true:vcc_detect=false:protocol=T=0:gsmtap_enable=false:pcap_file=out.pcap \ -A iso7816 ``` ### Бкорости Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ETU Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ значСния, наблюдавшиСся Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… записСй ΠΏΡ€ΠΈ частотС дискрСтизации 16 ΠœΠ“Ρ†: | Врасса | Π Π΅ΠΆΠΈΠΌ CLK | ETU (отсчёты) | CLK/ETU | ΠšΠΎΠ½Π²Π΅Π½Ρ†ΠΈΡ | ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ | |-------|----------|---------------|---------|------------|-------| | test_8 | постоянный | ~43 | 372 (стандарт) | Direct | PC/SC Ρ€ΠΈΠ΄Π΅Ρ€, ATR+PPS+APDU | | test_7 | постоянный | ~43 | 372 (стандарт) | Direct | PC/SC Ρ€ΠΈΠ΄Π΅Ρ€, Ρ‚Ρ‘ΠΏΠ»Ρ‹Π΅ сбросы | | xiaomi | Π³Π΅ΠΉΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ/остановлСнный | ~53 | восстановлСн ΠΈΠ· DATA | Direct | Π’Π΅Π»Π΅Ρ„ΠΎΠ½, сСрСдина сСссии | | samsung | Π³Π΅ΠΉΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ/остановлСнный | ~72 | 16 (F=512/D=32) | Direct | Π’Π΅Π»Π΅Ρ„ΠΎΠ½, нСстандартный F/D, мСню STK | | alcor_reader | постоянный | ~53 | 16 (F=512/D=32) | Direct | PC/SC Ρ€ΠΈΠ΄Π΅Ρ€, CLK 4.0 ΠœΠ“Ρ† Π½Π° ATR -> 4.8 ΠœΠ“Ρ† послС PPS | Π”Π΅ΠΊΠΎΠ΄Π΅Ρ€ автоопрСдСляСт ETU ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ подходящий Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ Π±ΠΈΡ‚ΠΎΠ² (CLK-синхронный для постоянного CLK, edge-list для Π³Π΅ΠΉΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ/ остановлСнного CLK). Никакой Ρ€ΡƒΡ‡Π½ΠΎΠΉ настройки Π½Π΅ трСбуСтся, ΠΊΡ€ΠΎΠΌΠ΅ `clock_option=native` ΠΈ `protocol=T=0` для Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹Ρ… записСй. Π§Ρ‘Ρ‚Π½ΠΎΡΡ‚ΡŒ β€” **чётная** ΠΏΠΎ TS 102 221 (Β«Ρ‡Ρ‘Ρ‚Π½ΠΎΠ΅ число Π±ΠΈΡ‚ΠΎΠ², установлСнных Π² '1', Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π±ΠΈΡ‚ чётности»); ΠΊΠ°Π΄Ρ€Ρ‹, Π½Π΅ ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ `CHKSUM ERROR`, Π½ΠΎ всё Ρ€Π°Π²Π½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. ## ЛицСнзия GPL-2.0+, ΠΊΠ°ΠΊ ΠΈ upstream.