Bagikan melalui


Tes Baca I2C WinRT (Diperlukan EEPROM)

Pengujian I2C melakukan pengujian fungsional dan stres pengontrol I2C yang terekspos ke usermode melalui WINDOWS.Devices.I2c WinRT API. Tes dibagi menjadi dua bagian - tes fungsi dan stres dasar, dan tes fungsi lanjutan. Cakupan pengujian tes fungsi dasar meliputi:

  • Verifikasi bahwa pengontrol I2C dengan nama ramah tertentu dapat diakses dari usermode.
  • Verifikasi bahwa data ditulis dengan benar selama rentang kecepatan jam dan panjang buffer hingga 8 byte (ukuran halaman EEPROM).
  • Verifikasi bahwa data dibaca dengan benar selama rentang kecepatan jam dan panjang buffer.
  • Verifikasi bahwa urutan write-restart-read (WriteReads) dijalankan dengan benar pada berbagai frekuensi clock dan panjang buffer.
  • Verifikasi bahwa ketika menulis, membaca, atau WriteRead dicoba ke alamat slave yang tidak mendapatkan pengakuan, pengemudi mengembalikan STATUS_NO_SUCH_DEVICE. Hal ini dilaporkan oleh I2cDevice::Write/Read/WriteRead() sebagai HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) dan dilaporkan oleh I2cDevice::WritePartial/ReadPartial/WriteReadPartial() sebagai I2cTransferStatus::SlaveAddressNotAcknowledged.
  • Verifikasi bahwa API dan driver berfungsi dengan benar dalam kondisi stres. Pengujian stres menulis dan membaca dari dua EEPROM secara bersamaan dengan pegangan perangkat terpisah selama waktu yang lama.

Cakupan pengujian pengujian fungsi lanjutan meliputi:

  • Verifikasi bahwa data ditulis dengan benar untuk panjang buffer hingga 16384 byte.
  • Verifikasi bahwa kondisi restart I2C dihasilkan sebagai respons terhadap urutan WriteRead.
  • Verifikasi bahwa ketika perangkat sekunder mengirimkan NAK saat pengendali masih sedang menulis byte, driver menyelesaikan permintaan dengan STATUS_SUCCESS dan melaporkan jumlah byte sebenarnya yang ditulis melalui informasi permintaan. Ini disebut transfer parsial, dan dilaporkan oleh WritePartial() dan WriteReadPartial() sebagai I2cTransferStatus::P artialTransfer.
  • Verifikasi bahwa pemanjangan sinyal jam hingga 500ms diizinkan dan tidak menyebabkan transfer gagal.
  • Verifikasi bahwa ketika perangkat sekunder mempertahankan garis jam tetap rendah selama durasi yang lama (10+ detik), driver menyelesaikan transfer dalam waktu paling banyak 10 detik dengan kode kesalahan. Kode kegagalan harus STATUS_IO_TIMEOUT, tetapi ini tidak diverifikasi karena alasan kompatibilitas.

Pengujian fungsional dasar dan pengujian stres berjalan terhadap dua EEPROM yang terhubung secara eksternal. Pengujian fungsional tingkat lanjut dijalankan pada mbed LPC1768 yang menjalankan firmware kustom. Mbed LPC1768 adalah platform prototipe mikrokontroler populer yang dapat dibeli dari berbagai peritel online termasuk Farnell, Digikey, dan Adafruit. Memperbarui firmware mbed sesederhana menyeret dan melepas file. Kode sumber firmware tersedia di github. Petunjuk tentang menyiapkan mbed dan menjalankan pengujian disediakan di bawah ini.

Detail pengujian

   
Spesifikasi
  • Device.BusController.I2C.WinRT.Diskresional
Platform
    Rilis yang Didukung
    • Windows 10
    • Windows 10, versi 1511
    • Windows 10, versi 1607
    • Windows 10, versi 1703
    • Windows 10, versi 1709
    • Windows 10, versi 1803
    • Windows 10, versi 1809
    • Windows 10, versi 1903
    • Pembaruan berikutnya ke Windows 10
    Durasi yang diharapkan (dalam menit) 5
    Kategori Pengembangan
    Batas Waktu (dalam menit) 10
    Boot ulang diperlukan tidak benar
    Memerlukan konfigurasi khusus benar
    Tipe otomatis

     

    Dokumentasi tambahan

    Pengujian di area fitur ini mungkin memiliki dokumentasi tambahan, termasuk prasyarat, penyiapan, dan informasi pemecahan masalah, yang dapat ditemukan dalam topik berikut:

    Menjalankan pengujian

    Menjalankan tes fungsi dan stres dasar

    Anda akan memerlukan perangkat keras berikut untuk menjalankan pengujian:

    Hubungkan EEPROM seperti yang ditunjukkan pada diagram berikut dan sambungkan SDA dan SCL ke perangkat Anda yang sedang diuji.

    skema eeprom i2c

    Anda sekarang dapat menjadwalkan tes fungsi dan stres dasar dari manajer HLK.

    Menjalankan pengujian fungsi lanjutan

    Pengujian fungsi lanjutan memverifikasi perilaku penolakan sinyal (NACKing), kondisi bus tergantung, peregangan sinyal jam, dan memulai ulang berulang. Pengujian memerlukan mbed LPC1768 menjalankan firmware kustom untuk terhubung ke perangkat yang sedang diuji. Sebelum menjalankan pengujian, Anda harus memuat firmware HLK ke LPC1768 mbed. Berikut cara memperbarui firmware:

    1. Colokkan LPC1768 mbed melalui USB ke PC Anda. Ini akan muncul sebagai drive yang dapat dilepas di PC Anda.
    2. Buka drive di penjelajah file
    3. Salin c:\Program Files (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin ke mbed
    4. Tekan tombol pada mbed untuk mengatur ulang mikrokontroler

    Selanjutnya, hubungkan mbed ke perangkat yang sedang diuji. Colokkan mbed melalui USB ke perangkat Anda saat pengujian. Kemudian, buat koneksi I2C (pinout mbed),

    1. Sambungkan pin mbed 9 (P0.0/SDA) ke pin SDA di perangkat Anda saat pengujian
    2. Sambungkan pin mbed 10 (P0.1/SCL) ke pin SCL di perangkat Anda di bawah pengujian
    3. Menyambungkan GND mbed ke pin GND di perangkat Anda saat pengujian

    Mbed memiliki resistor pull-up internal yang diaktifkan pada jalur SDA dan SCL dan tidak memerlukan resistor pull-up eksternal.

    Anda sekarang dapat menjadwalkan pengujian fungsi lanjutan dari manajer HLK.

    Pemecahan Masalah

    Untuk pemecahan masalah umum kegagalan pengujian HLK, lihat Pemecahan Masalah Kegagalan Pengujian Windows HLK.

    Sebaiknya jalankan pengujian pada baris perintah untuk mendapatkan wawasan tentang kegagalan dan dengan cepat melakukan iterasi pada solusi. Berikut cara menjalankan pengujian pada baris perintah:

    1. Salin %programfiles(x86)%\Windows Kits\10\Testing\Runtimes\TAEF\<arch>\MinTe ke c:\data\minte

    2. Salin Windows.Devices.LowLevel.UnitTests.dll dari %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot ke c:\data di perangkat Anda.

    3. Telnet atau ssh ke perangkat Anda

    4. Ubah direktori menjadi c:\data

    5. Jalankan pengujian:

      minte\te windows.devices.lowlevel.unittests.dll /name:I2c*
      

    Penggunaan uji baris perintah:

    minte\te windows.devices.lowlevel.unittests.dll [/name:test_name] [/select:select_clause] [/p:I2cFriendlyName=friendly_name] [/p:Duration=duration]
    
    • test_name - nama pengujian yang akan dijalankan yang mungkin menyertakan kartubebas. Contoh: /name:I2c*, /name:I2cEepromWriteTests#metadataSet0::VerifyWrite#metadataSet0
    • select_clause - klausa pemilihan TAEF. Contoh: /select:"@name='I2c*' and not(@name='I2cTestsEx*')"
    • friendly_name - nama ramah pengontrol I2C yang sedang diuji. Jika dihilangkan, pengontrol enumerasi pertama digunakan. Contoh: /p:I2cFriendlyName=I2C0
    • durasi - berapa lama untuk menjalankan tes stres. Contoh: /p:Duration=10s (10 detik), /p:Duration=1m (1 menit), /p:Duration=2h (2 jam), /p:Duration=1d (1 hari)

    Contoh:

    Untuk menjalankan tes fungsional dasar,

    minte\te windows.devices.lowlevel.unittests.dll /select:"@name='I2c*' and not(@name='I2cTestsEx*')"
    

    Untuk menjalankan pengujian fungsional tingkat lanjut,

    minte\te windows.devices.lowlevel.unittests.dll /name:I2cTestsEx::*
    

    Untuk menjalankan pengujian terhadap instans pengontrol I2C tertentu, berikan nama yang mudah diingat ke parameter pengujian I2cFriendlyName,

    minte\te windows.devices.lowlevel.unittests.dll /name:I2c* /p:I2cFriendlyName=I2C0
    

    Untuk menjalankan pengujian tertentu, berikan nama pengujian lengkap ke parameter /name:

    minte\te windows.devices.lowlevel.unittests.dll /name:I2cNonexistentSlaveAddressTests::TestWriteRead
    

    Untuk menjalankan tes stres dengan durasi yang disarankan selama 8 jam, jalankan

    minte\te windows.devices.lowlevel.unittests.dll /name:I2cStressTests::StressIoConcurrent /p:Duration=8h
    

    Alat yang dapat membantu pemecahan masalah manual adalah I2cTestTool. I2cTestTool adalah utilitas sederhana untuk berinteraksi dengan I2C dari baris perintah.

    Informasi selengkapnya

    Parameter

    Nama Parameter Deskripsi parameter
    I2cFriendlyName Nama yang mudah diingat dari pengontrol I2C yang sedang diuji (misalnya I2C0).