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) 비트를 수신하지 못했습니다. 이 경우 데이터 전송이 실패했습니다.NAKData: 카메라가 최신 쓰기 명령 이후 성공적인 데이터 전송에 대한 응답(Acknowledge) 비트를 수신하지 못했습니다. 이 경우 데이터 전송이 실패했습니다.
I/O Line을 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를 사용하여 파라미터를 손쉽게 설정할 수도 있습니다.