I2C WinRT 쓰기 테스트(EEPROM이 필요)
I2C 테스트는 Windows.Devices.I2c WinRT API를 통해 사용자 모드에 노출된 I2C 컨트롤러의 기능 및 스트레스 테스트를 수행합니다. 테스트는 기본 기능 및 스트레스 테스트와 고급 기능 테스트의 두 부분으로 나뉩니다. 기본 기능 테스트의 테스트 범위는 다음과 같습니다.
- 사용자 모드에서 식별 이름이 지정된 I2C 컨트롤러에 액세스할 수 있는지 확인합니다.
- 최대 8바이트(EEPROM 페이지 크기)의 버퍼 길이 및 클록 속도 범위에서 데이터가 올바르게 기록되었는지 확인합니다.
- 클록 속도 및 버퍼 길이 범위에서 데이터가 올바르게 읽혀지는지 확인합니다.
- 쓰기-다시 시작-읽기 시퀀스(WriteRead)가 클록 속도 및 버퍼 길이 범위에서 올바르게 실행되는지 확인합니다.
- 승인되지 않은 슬레이브 주소에 대해 쓰기, 읽기 또는 쓰기 읽기를 시도하면 드라이버가 STATUS_NO_SUCH_DEVICE를 반환하는지 확인합니다. 이는 I2cDevice::Write/Read/WriteRead()에 의해 HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)로 보고되고 I2cDevice::WritePartial/ReadPartial/WriteReadPartial()에 의해 I2cTransferStatus::SlaveAddressNotAcknowledged로 보고됩니다.
- API 및 드라이버가 스트레스 조건에서 올바르게 작동하는지 확인합니다. 스트레스 테스트는 확장된 기간 동안 별도의 디바이스 핸들을 사용하여 두 개의 EEPROM에서 동시에 쓰고 읽습니다.
고급 기능 테스트의 테스트 범위는 다음과 같습니다.
- 최대 16384바이트의 버퍼 길이에 대해 데이터가 올바르게 기록되었는지 확인합니다.
- WriteRead 시퀀스에 대한 응답으로 I2C 다시 시작 조건이 생성되는지 확인합니다.
- 마스터가 여전히 바이트를 쓰는 동안 슬레이브 디바이스가 NAK일 때 드라이버가 STATUS_SUCCESS로 요청을 완료하고 요청 정보를 통해 작성된 실제 바이트 수를 보고하는지 확인합니다. 이를 부분 전송이라고 하며 WritePartial() 및 WriteReadPartial()에 의해 I2cTransferStatus::PartialTransfer로 보고됩니다.
- 최대 500ms의 클록 확장이 허용되고 전송 실패를 유발하지 않는지 확인합니다.
- 슬레이브 디바이스가 연장된 기간(10초 이상) 동안 클록 라인을 낮게 유지하면 드라이버가 오류 코드와 함께 최대 10초 이내에 전송을 완료하는지 확인합니다. 실패 코드는 STATUS_IO_TIMEOUT이어야 하지만 호환성을 위해 확인되지 않았습니다.
기본 기능 테스트 및 스트레스 테스트는 두 개의 외부 연결된 EEPROM에 대해 실행됩니다. 고급 기능 테스트는 사용자 지정 펌웨어를 실행하는 mbed LPC1768에 대해 실행됩니다. mbed LPC1768은 Sparkfun, Digikey 및 Adafruit를 비롯한 다양한 온라인 소매업체에서 구입할 수 있는 자주 사용되는 마이크로컨트롤러 프로토타이핑 플랫폼입니다. mbed의 펌웨어 업데이트는 파일을 끌어다 놓는 것만큼 간단합니다. 펌웨어 소스 코드는 github에서 사용할 수 있습니다. mbed 준비 및 테스트 실행에 대한 명령은 아래에 나와 있습니다.
테스트 세부 정보
사양 |
|
플랫폼 | |
지원되는 릴리스 |
|
예상 실행 시간(분) | 5 |
범주 | 개발 |
시간 제한(분) | 10 |
다시 부팅 필요 | false |
특별한 구성 필요 | true |
형식 | automatic |
추가 설명서
이 기능 영역의 테스트에는 다음 항목에서 찾을 수 있는 필수 조건, 설정, 문제 해결 정보를 포함한 추가 설명서가 있을 수 있습니다.
테스트 실행
기본 기능 및 스트레스 테스트 실행
테스트를 실행하려면 다음 하드웨어가 필요합니다.
- Atmel AT24HC 직렬 EEPROM qt. 2
- 10k 저항기 qt. 2
- 브레드보드
- 와이어
다음 다이어그램과 같이 EEPROM을 연결하고 SDA와 SCL을 테스트 중인 디바이스에 연결합니다.
이제 HLK 관리자에서 기본 기능 및 스트레스 테스트를 예약할 수 있습니다.
고급 기능 테스트 실행
고급 기능 테스트는 NACKing 동작, 중단된 버스 상태, 클록 확장 및 반복된 시작을 확인합니다. 테스트를 수행하려면 테스트 중인 디바이스에 연결하기 위해 사용자 지정 펌웨어를 실행하는 mbed LPC1768이 필요합니다. 테스트를 실행하기 전에 HLK 펌웨어를 mbed LPC1768에 로드해야 합니다. 펌웨어를 업데이트하는 방법은 다음과 같습니다.
- USB를 통해 mbed LPC1768을 PC에 연결합니다. PC에서 이동식 드라이브로 표시됩니다.
- 파일 탐색기에서 드라이브 열기
- c:\Program Files(x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin을 mbed에 복사합니다.
- 마이크로 컨트롤러를 다시 설정하려면 mbed의 단추를 누릅니다.
다음으로, 테스트 중인 디바이스에 mbed를 연결합니다. USB를 통해 mbed를 테스트 중인 디바이스에 연결합니다. 그런 다음, I2C 연결(mbed 핀아웃)을 만들고
- mbed 핀 9(P0.0/SDA)를 테스트 중인 디바이스의 SDA 핀에 연결합니다.
- mbed 핀 10(P0.1/SCL)을 테스트 중인 디바이스의 SCL 핀에 연결합니다.
- 테스트 중인 디바이스의 GND 핀에 mbed GND를 연결합니다.
mbed에는 SDA 및 SCL 라인에서 사용하도록 설정된 내부 풀업 저항이 있으며 외부 풀업 저항이 필요하지 않습니다.
이제 HLK 관리자에서 고급 기능 테스트를 예약할 수 있습니다.
문제 해결
HLK 테스트 실패의 일반적인 문제 해결은 Windows HLK 테스트 실패 문제 해결을 참조하세요.
실패에 대한 인사이트를 얻고 솔루션을 빠르게 반복하려면 명령줄에서 테스트를 실행하는 것이 좋습니다. 명령줄에서 테스트를 실행하는 방법은 다음과 같습니다.
%programfiles(x86)%\Windows Kits\10\Testing\Runtimes\TAEF\<arch>\MinTe를 c:\data\minte에 복사합니다.
Windows.Devices.LowLevel.UnitTests.dll을 %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot에서 디바이스의 c:\data로 복사합니다.
텔넷 또는 ssh를 디바이스에 연결
디렉터리를 c:\data로 변경
테스트를 실행합니다.
minte\te windows.devices.lowlevel.unittests.dll /name:I2c*
명령줄 테스트 사용법:
minte\te windows.devices.lowlevel.unittests.dll [/name:test_name] [/select:select_clause] [/p:I2cFriendlyName=friendly_name] [/p:Duration=duration]
- test_name - 와일드카드를 포함할 수 있는 실행할 테스트의 이름입니다. 예: /name:I2c*, /name:I2cEepromWriteTests#metadataSet0::VerifyWrite#metadataSet0
- select_clause - a TAEF 선택 절. 예: /select:"@name="I2c*" 및 not(@name="I2cTestsEx*")"
- Friendly_name - 테스트 중인 I2C 컨트롤러의 식별 이름입니다. 생략하면 첫 번째 열거 컨트롤러가 사용됩니다. 예: /p:I2cFriendlyName=I2C0
- duration - 스트레스 테스트를 실행하는 기간입니다. 예: /p:Duration=10s(10초), /p:Duration=1m(1분), /p:Duration=2h(2시간), /p:Duration=1d(1일)
예:
기본 기능 테스트를 실행하려면
minte\te windows.devices.lowlevel.unittests.dll /select:"@name='I2c*' and not(@name='I2cTestsEx*')"
고급 기능 테스트를 실행하려면
minte\te windows.devices.lowlevel.unittests.dll /name:I2cTestsEx::*
특정 I2C 컨트롤러 인스턴스에 대해 테스트를 실행하려면 I2cFriendlyName 테스트 매개 변수에 식별 이름을 전달합니다.
minte\te windows.devices.lowlevel.unittests.dll /name:I2c* /p:I2cFriendlyName=I2C0
특정 테스트를 실행하려면 전체 테스트 이름을 /name 매개 변수에 전달합니다.
minte\te windows.devices.lowlevel.unittests.dll /name:I2cNonexistentSlaveAddressTests::TestWriteRead
권장되는 8시간 동안 스트레스 테스트를 실행하려면 다음을 실행합니다.
minte\te windows.devices.lowlevel.unittests.dll /name:I2cStressTests::StressIoConcurrent /p:Duration=8h
수동 문제 해결에 도움이 되는 도구는 I2cTestTool입니다. I2cTestTool은 명령줄에서 I2C와 상호 작용하기 위한 간단한 유틸리티입니다.
추가 정보
매개 변수
매개 변수 이름 | 매개 변수 설명 |
---|---|
I2cFriendlyName | 테스트 중인 I2C 컨트롤러의 식별 이름입니다(예: I2C0). |