Two-Wire Interface#
예를 들어, 카메라를 사용하여 TWI 호환 렌즈의 초점을 제어할 수 있습니다.
기능 사용법#
작동 원리#
TWI 버스는 하나의 직렬 데이터 라인(SDA)과 하나의 직렬 클럭 라인(SCL)으로 구성된 2선식 버스입니다. 이들은 양방향 라인입니다.
카메라(마스터)와 외부 장치(슬레이브)는 데이터 라인과 클럭 라인 모두에 연결됩니다. 데이터는 카메라를 통해 데이터 라인으로 전송되거나 요청 및 수신됩니다. 클럭 라인은 클럭 신호 전송에 사용되며 카메라가 제어합니다.
위에서 설명한 TWI 인터페이스를 활용하려면 카메라의 GenICam 파라미터가 슬레이브 장치의 사양을 준수해야 합니다.
적절한 통신 프로토콜을 구현하는 데 도움이 되는 카메라 파라미터는 아래에 나열되어 있습니다.
TWI 통신 구성#
카메라와 외부 장치 간의 TWI 통신을 구성하려면:
- 다음 값 중 하나로
BslTwiBitrate파라미터를 TWI에 사용할 비트 레이트(예: 50 kbps)로 설정합니다. - 카메라의 입출력 신호를 구성합니다.
- 다음 값 중 하나로
LineSelector직렬 데이터를 쓰고 읽어야 하는 I/O 라인으로 파라미터를 설정합니다(예:Line2). 라인은 다음과 같이 구성되어야 합니다. 입출력 라인. - 다음 값 중 하나로
BslLineConnection매개변수:TwiSda. - 다음 값 중 하나로
LineSelector클럭 신호 전송에 사용할 I/O 라인으로 파라미터를 설정합니다(예:Line3). 라인은 입출력 라인으로 구성되어야 합니다. - 다음 값 중 하나로
BslLineConnection매개변수:TwiScl.
- 다음 값 중 하나로
데이터 쓰기 및 읽기#
TWI 통신을 구성한 후, 외부 장치에 데이터를 쓰고 외부 장치에서 데이터를 읽을 수 있습니다.
파라미터 쓰기 및 읽기#
데이터 쓰기 및 읽기에는 다음 파라미터가 관여합니다:
BslTwiTransferBuffer: 전송 버퍼에는 쓸 데이터가 유지되며, 읽은 데이터도 포함됩니다. 최대 16바이트를 저장할 수 있습니다.BslTwiTransferLength: 전송 버퍼에서 또는 전송 버퍼로 전송되어야 하는 바이트 수를 나타냅니다. 쓰기 시 전송 길이는 트랜잭션당 카메라가 전송해야 하는 바이트 수를 지정합니다. 읽기 시 마지막 트랜잭션 동안 카메라가 수신한 바이트 수를 지정합니다. 최대값은 16입니다.BslTwiTargetAddress: 외부 슬레이브 장치의 7비트 타겟 주소를 나타냅니다.
데이터 쓰기 작업에는 다음 파라미터가 관련됩니다.
BslTwiWrite: 이 명령을 실행하면 전송 버퍼에서 지정된 전송 길이만큼의 바이트를 슬레이브 디바이스의 대상 주소로 씁니다.
데이터 읽기 작업에는 다음 파라미터가 관련됩니다.
BslTwiRead: 이 명령을 실행하여 슬레이브 디바이스의 대상 주소에서 데이터를 읽거나 가져옵니다. 읽어올 바이트 수는 전송 길이에 의해 지정됩니다.
전송 상태#
전송 상태는 데이터 전송의 현재 상태를 나타냅니다. 전송이 성공적으로 완료되면 전송 상태는 다음을 나타냅니다. Success. 현재 전송 상태를 가져오려면 다음을 실행하여 전송 상태를 업데이트한 후 BslTwiUpdateTransferStatus 명령을 실행하고 BslTwiTransferStatus.
의 값을 확인합니다. 만약 BslTwiTransferStatus 인 경우 Pending의 값이 이와 같다면, 전송 상태가 다음을 나타낼 때까지 전송 상태를 반복해서 업데이트하고 읽어야 합니다. Success. 전송 상태가 다음을 나타내는 경우에만 새로운 데이터를 쓰거나 읽을 수 있습니다. Success.
전송 상태는 다음과 같은 값을 가질 수 있습니다.
Success: 최신 데이터 전송이 성공했습니다.Pending: 데이터 전송이 대기 중입니다.NAKAddress: 카메라가 최신 쓰기 또는 읽기 명령 이후에 대상 주소를 확인하는 응답 비트(Acknowledge bit)를 수신하지 못했습니다. 이 경우 데이터 전송이 실패합니다.NAKData: 카메라가 최신 쓰기 명령 이후에 성공적인 데이터 전송에 대한 응답 비트를 수신하지 못했습니다. 이 경우 데이터 전송이 실패합니다.
I/O 라인을 Low로 풀링#
일부 TWI 슬레이브 디바이스는 작동을 시작하기 전에 I/O 라인을 Low 상태로 만들어야 합니다. I/O 라인을 Low 상태로 만들어야 하는 경우 BslTwiPullSdaLow 파라미터, BslTwiPullSclLow 파라미터 또는 둘 다를 true(으)로 설정합니다. 이들 중 하나가 true인 동안에는 데이터 전송이 비활성화됩니다.
샘플 코드#
// Configure TWI communication
// Set the bit rate to 50 kbps
camera.BslTwiBitrate.SetValue(BslTwiBitrate_Bitrate50kbps);
// Set line 2 to input-output and use it for TWI SDA
camera.LineSelector.SetValue(LineSelector_Line2);
camera.LineMode.SetValue(LineMode_InOut);
camera.BslLineConnection.SetValue(BslLineConnection_TwiSda);
// Set line 3 to input-output and use it for TWI SCL
camera.LineSelector.SetValue(LineSelector_Line3);
camera.LineMode.SetValue(LineMode_InOut);
camera.BslLineConnection.SetValue(BslLineConnection_TwiScl);
// Now, you must implement a suitable communication protocol.
// Camera parameters that help you implement the protocol are listed
// in the "Writing and Reading and Data" section above.
INodeMap& nodemap = camera.GetNodeMap();
// Configure TWI communication
// Set the bit rate to 50 kbps
CEnumParameter(nodemap, "BslTwiBitrate").SetValue("Bitrate50kbps");
// Set line 2 to input-output and use it for TWI SDA
CEnumParameter(nodemap, "LineSelector").SetValue("Line2");
CEnumParameter(nodemap, "LineMode").SetValue("InOut");
CEnumParameter(nodemap, "BslLineConnection").SetValue("TwiSda");
// Set line 3 to input-output and use it for TWI SCL
CEnumParameter(nodemap, "LineSelector").SetValue("Line3");
CEnumParameter(nodemap, "LineMode").SetValue("InOut");
CEnumParameter(nodemap, "BslLineConnection").SetValue("TwiScl");
// Now, you must implement a suitable communication protocol.
// Camera parameters that help you implement the protocol are listed
// in the "Writing and Reading and Data" section above.
// Configure TWI communication
// Set the bit rate to 50 kbps
camera.Parameters[PLCamera.BslTwiBitrate].SetValue(PLCamera.BslTwiBitrate.Bitrate50kbps);
// Set line 2 to input-output and use it for TWI SDA
camera.Parameters[PLCamera.LineSelector].SetValue(PLCamera.LineSelector.Line2);
camera.Parameters[PLCamera.LineMode].SetValue(PLCamera.LineMode.InOut);
camera.Parameters[PLCamera.BslLineConnection].SetValue(PLCamera.BslLineConnection.TwiSda);
// Set line 3 to input-output and use it for TWI SCL
camera.Parameters[PLCamera.LineSelector].SetValue(PLCamera.LineSelector.Line3);
camera.Parameters[PLCamera.LineMode].SetValue(PLCamera.LineMode.InOut);
camera.Parameters[PLCamera.BslLineConnection].SetValue(PLCamera.BslLineConnection.TwiScl);
// Now, you must implement a suitable communication protocol.
// Camera parameters that help you implement the protocol are listed
// in the "Writing and Reading and Data" section above.
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK; /* Return value of pylon methods */
/* Configure TWI communication */
/* Set the bit rate to 50 kbps */
errRes = PylonDeviceFeatureFromString(hdev, "BslTwiBitrate", "Bitrate50kbps");
CHECK(errRes);
/* Set line 2 to input-output and use it for TWI SDA */
errRes = PylonDeviceFeatureFromString(hdev, "LineSelector", "Line2");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "LineMode", "InOut");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "BslLineConnection", "TwiSda");
CHECK(errRes);
/* Set line 3 to input-output and use it for TWI SCL */
errRes = PylonDeviceFeatureFromString(hdev, "LineSelector", "Line3");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "LineMode", "InOut");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "BslLineConnection", "TwiScl");
CHECK(errRes);
/* Now, you must implement a suitable communication protocol. */
/* Camera parameters that help you implement the protocol are listed */
/* in the "Writing and Reading and Data" section above. */
# Configure TWI communication
# Set the bit rate to 50 kbps
camera.BslTwiBitrate.Value = "Bitrate50kbps"
# Set line 2 to input-output and use it for TWI SDA
camera.LineSelector.Value = "Line2"
camera.LineMode.Value = "InOut"
camera.BslLineConnection.Value = "TwiSda"
# Set line 3 to input-output and use it for TWI SCL
camera.LineSelector.Value = "Line3"
camera.LineMode.Value = "InOut"
camera.BslLineConnection.Value = "TwiScl"
# Now, you must implement a suitable communication protocol.
# Camera parameters that help you implement the protocol are listed
# in the "Writing and Reading and Data" section above.
또한 pylon Viewer를 사용하여 파라미터를 손쉽게 설정할 수 있습니다.