컴퓨터 버스의 표준
vme tutorial
microprocessor 기술에 기초한 VERSAbus의 전기적 기준에 견고하고 모듈화 되어있는 Eurocard 시스템형태를 결합한 것
본래 IBM-PC는 두개의 카드가 장착된 경우 CPU가 하나의 카드만을 사용할 때는 문제가 없다가도 두개를 같이 사용하면 오작동 하는 등의 문제가 있을 수 있는데 VME의 경우 이러한 문제가 발생하지 않아 호환성이 아주 우수하다.
특징
VME64/VME64x 규격에서의 일반적인 특징
VMEbus 적용분야
1. 산업용 컨트롤 장비
2. 운송
3. 전자통신
4. 모의시험
5. 의료
6. HIGH Energy Physical
7. 일반사업분야
VMEbus의 최근판으로 ANSI/VITA 1-1994로도 부른다.
VMEbus는 어느 컴퓨터 구조보다 다양한 소프트웨어 베이스를 가지고 있다.
VMEbus는 매우 빠르며, 현재 알려진 Microcomputer 버스중에서 가장 빠르다.
- 기능적 모듈
watchdog timer
컴퓨터 내에 있는 중앙 처리 장치(CPU)의 고장을 검출하는 타이머이다.
이 타이머는 통상 마이크로컴퓨터가 정기적으로 리셋을 걸도록 되어 있지만, 루틴이 정상적으로 돌아가지 않으면 타이머가 오버플로시켜 이상을 검출한다.
- 하위버스
- VMEbus Cycle
VMEbus에서 데이터 크기를 나타내는 컨트롤 신호는 LWORD*, DS1*, DS0*
이 있다.
VMEbus는 원래 16bit, 32bit 마이크로프로세서가 공동으로 사용할 수 있도록 설계되어 있어서
싱글 바이트 데이터 전송이나 더블 바이트 데이터 전송 시 어드레스에 상관없이 D15-D0의 데이터 라인만을 사용하고 있다.
32bit의 마이크로프로세서에서는 더블 바이트 데이터 전송 시 어드레스에 따라 데이터가 실리는 위치가 달라지기 때문에 VMEbus와 보드내의 데이터 라인의 위치가 달라질 수 있다.
(트리플 바이트 데이터 전송을 보통 사용하지 않음)
※ 마스터, 슬레이브 보드에 관계없이 설계시에 주의해야 함
※ L : Low-signal level
H : High-signal level
VMEbus는 A31-A01의 31개의 Address Line을 가지고 있지만 항상 전부 다 사용하지 않고 AM코드라는 AM5-AM0의 6개의 신호를 별도로 두어 전송하는 Address 크기와 성격을 따로 규정해 주었다.
#include <vxWorks.h>
#include <stdio.h>
#include <vme.h>
int main() {
int vmeBusHandle;
int ioBoardAddress = 0x12345678; // IO 보드의 실제 주소로 대체
if ((vmeBusHandle = sysBusToLocalAdrs(VME_AM_STD_SUP_DATA, ioBoardAddress, &ioBoardAddress)) == ERROR) {
printf("Failed to map VMEBus address\n");
return ERROR;
}
// VMEBus에서 데이터 읽기 (예: 32비트 데이터를 읽는 경우)
UINT32 sensorData;
if (sysBusPeek32(ioBoardAddress, &sensorData) == OK) {
printf("센서 데이터: 0x%X\n", sensorData);
} else {
printf("데이터 읽기 실패\n");
}
// VMEBus 리소스 정리
sysBusToLocalAdrs(0, ioBoardAddress, &ioBoardAddress);
return OK;
}