'2008/08'에 해당되는 글 15건

초 간단, CT의 원리!! - Filtered back projection :: 2008/08/07 06:42   by 김지혜(18기)

전의 포스트에서는 Back-projection 의 개념을 설명하였는데..
간단하게 생각되는 알고리즘이지만, 단점은 이미지가 블러된듯한 느낌이 든다는 것이였습니다.
하지만 Back-projection 과정에서 생기는 blurring 현상은 신호처리 기법으로 완벽하게 해결할 수 있습니다.
(그렇다고 모두에게 쉬운것은 아닙니다-_ㅠ,, 저는 계속 삽질중,,)

요컨데, Projection data를 back-projection 하기 전에 적당한 필터로 처리한 뒤 back-projection을 하면 blurring 현상을 보상할 수 있다는 것이다. 이렇게 영상을 재구성하는 방법을 filtered back-projection이라 부릅니다.  (전 포스팅에서 말씀드렸지만,, 이미지를 리컨하는 알고리즘은 다양하지만, 다 거기서 거기랍니다..)


filtered backprojection은 이렇게 진행됩니다.

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지



...

(참고적으로 미리 말씀드리면.. 저 어려운 적분공식에서 무한대에서 마이너스 무한대로...
하지만 실제로 구현할때는 불가능하지 않습니까-_-;;?
적당한 trade off가 필요한 시점입니다.. 사실 아직까지 적당한 값을 못찾았습니다.. 헤매는중..)


쉽게 말씀드리면 이렇습니다.

1. Find the 1D FT of the projections for each angle.

2. Multiply the result of step 1. above with the response function in the frequency domain (equivalent to convolving with the response function in the time domain). In the actual simulations, the response function is simply a ramp with 45 degree slope and with the same length as the finalreconstructed image. (In the function shown in fig. (2.2), the vertical magniture represents the distance between the rays).

3. Find the IFFT of the results in step 2. This gives us the filtered projections in the discrete domain and correspond to Q(n), where the Q's are taken at the various angles at which the projections were taken, and "n" is the ray number at which the line projection was taken.

4. Back-project. The integral of the continuous time system now becomes a summation, and we get


끄응 ... 
역시 너무 어려운 설명이기에 간단하게 모식도를 통한 초간단 설명이 이어져봅니다 .

사용자 삽입 이미지

단순히 back projection을 할때의
Detector signal은 단면의 주요부분에서만
값을 가지고 있습니다.
이러한 데이터를 가지고 backprojection을 한다면
저번 포스팅의 결과처럼
주변이 블러처리된 이미지가 출력되게 됩니다.

그래서...





사용자 삽입 이미지



그래서 back projection을 하기전에
이미지에 필터처리를 합니다.
 
간단하게 말하자면 FFT를 통해 주파수영역으로 이미지를 변환한 다음
많이 겹쳐져서 블러처리가 될 영역(주로 고주파부분)을 필터로
제거합니다.

그림에서 보여지는 Filterd Detector signal을 보시면
원래의 Detector signal에비해 들쭉날쭉한것을 볼 수 있습니다.
단면을 위한 signal은 살리고 필요 없는 부분은 잘라냈기 때문입니다.

이렇게 처리한 이미지를 back projection한것이
바로 filtered back projection입니다.
(다시 말씀드리지만, 변환알고리즘은 많지만 다 고만고만,
조금더 살을 붙인 수준입니다. 절대 포스팅을 두개 쓰기위해 -_-;;
나눠서 설명한것이 아닙니다..;;;)



좀더 기술적인 설명은 다음 그림을 참고해주세요.

사용자 삽입 이미지


실제로 filtered back projecton을 하였을때의 결과 참고자료입니다.

사용자 삽입 이미지

실제로도 이미지가 좀 더 샤프해졌다는 느낌을 받을 수 있습니다.
옆의 단순히 back projection만을 하였을 경우와 비교한다면, 많은 이미지 향상을 느낄 수 있습니다.

혹시나 해서 단순한 back projection과 필터처리함 back projection의 비교샷을 올려드립니다.

사용자 삽입 이미지

아까는 단순한 원 형태였기에 큰 차이를 못느끼셨겠지만,, 실제로는 이정도로 차이가 납니다.. 쿨럭..
이미지를 변환할때 필터의 중요성을 느낄수 있는 부분입니다..

마지막으로 자주 사용하는 필터를 올리고 이번 포스팅을 마칩니다.
다음 포스팅에서는 실제 ARTS 프로젝트를 하면서 나온 이미지를 가지고 다시한번 back projection과
filtered back projection을 비교하는 포스팅을 한번 더 올려보는 기회가 있었으면 합니다.

사용자 삽입 이미지

☆ 글쓴이 소개☆
김지혜(18기)님의 글입니다.

Trackback Address :: http://blog.swssm.org/trackback/252
  • 16기 | 2008/08/15 15:24 | PERMALINK | EDIT/DEL | REPLY

    Filtered back projection은 Radon Transform인거 같은데..

Name
Password
Homepage
Secret

초 간단, CT의 원리!! - Back Projection :: 2008/08/07 06:10   by 김지혜(18기)

이번 블로깅에서는 일단 간단하게 저희 프로젝트에서 가장 핵심이 되는 CT,
CT의 원리에대해 초 간단하게 알아보도록 하겠습니다.  그냥 대략적으로 개념이 이렇다 정도로요 ^^;
일단 지금은 간단한 backprojection의 원리를 나타내 보겠습니다.
(사실 CT변환알고리즘은 종류가 몇개 더 있습니다 ^^, 하지만 다 친척뻘이여서 ㅋ )


촬영 )

사용자 삽입 이미지


CT는 사실 엑스레이와 원리가 같습니다.
정확히 말하면 CT는 computed Tomography, 컴퓨터를 이용하여 단면영상으로 변환하는 것입니다. 그 변환과정에서 소스가 되는것은 x-ray ^^ Projection Data입니다.

다만 보통의 x-ray는 1장만 찍는데 비해 CT에서 단면으로 변환하기 위해서 360를 돌아가며 적게는 400장 많게는 1200장정도를 찍습니다.

각각의 view 1,2,3에서는
각각의 각도에서 찍었을때의 x-ray
projection Image를 나타낸 것입니다.


( 참고적으로, 엑스레이 사진은 다들 잘 알겠지만, 뼈처럼 엑스선을 많이 흡수한 부분을 투과한 부분은 어둡게, 그렇지 않은 부분은 밝게 나옵니다. 설명이 부족하다고 느껴지면 다시 포스팅하겠습니다.)

(또 , 다시 참고적으로... view 1,2,3,을 차곡히 쌓은것을 싸이노그램이라고 하는데,,
 뭐 단순히 변환할때 파일하나로 편하게 복원하기 위함도 없지않아 있지만,,,
 다음에 설명하게될 filtered back projection에서 사용되기 때문에,,, 만들게 된답니다.
 사실 메모리에 올려놓고 만들게되면 그닥 파일로 쓰지않아도 쿨럭..;)

back projection의 공식 입니다.

사용자 삽입 이미지

-          Projection data g( ) back-projection하여 b(x,y)를 얻는다.

-          Back-projection 과정은 projection data 하나 하나를 projection data를 얻은 직선을 따라 직선 상에 있는 모든 점에 projection data 값을 mapping을 해주는 과정이라 할 수 있다.




공식을 간단하게 설명하는 back projection의 모식도입니다.

사용자 삽입 이미지
각 projection data의 단면에 해당하는 부분을 다시 이미지에 씌웁니다. (아래 그림처럼 그 취득방향으로 반대로 투사시키는 것이다 (backprojection))각각의 뷰를 씌우게 되면 이미지가 점점더 뚜렷해지게되고 그 뚜렷해지는 이미지가 바로 그 물체의 단면영상이 되겠습니다.
그렇다면 이렇게 나온 단면영상이
실제의 단면과 같은가? 라고하면
그것은 아닙니다 ^^;;;

그림에서 보다싶이 단면에
많이 블러한듯한 이미지가 나오게됩니다.




물론 view의 수가 많아질수록 이미지의 정확도는 높아집니다.
하지만 단순히 back projection에서는 이미지가 블러된듯한 느낌이 듭니다.
참고이미지 입니다.

사용자 삽입 이미지



여기까지가 back projection의 원리였습니다. ^^

☆ 글쓴이 소개☆
김지혜(18기)님의 글입니다.

Trackback Address :: http://blog.swssm.org/trackback/251
Name
Password
Homepage
Secret

USB Descriptor의 구조와 기능 :: 2008/08/06 02:43   by 용석정(18기)

USB 통신에서 마치 신상명세서와 같은 역할을 하는 여러 가지 Descriptor들의 구조와 기능에 대해서 설명하겠다. 아래 그림은 각종Descriptor들끼리의 관계를 나타낸 그림이다.

사용자 삽입 이미지

 

위의 그림과 같이 호스트와 디바이스와의 통신에서 가장 먼저 Device Descriptor가 전달되고 그 다음부터는 Configuration → Interface → Endpoint 순으로 전달된다.


 1. Device Descriptor


사용자 삽입 이미지

Device Descriptor


  위의 Device Descripter는 USB가 Reset걸리면 처음으로 호스트에게 전송되는 정보이다. Descriptor의 첫 번째 길이 정보부터 해석을 하고 차례로 Type, Version 등의 정보를 받아들인다. 이 디스크립터에서 가장 중요한 정보는 8번째 Byte 64로서 이 정보를 보고 64Byte 통신을 하게 된다.

 2. Device Quality Descriptor


사용자 삽입 이미지

Device Quality Descriptor


  그 다음에 들어오는 정보는 Device Quality Descriptor이다. 이 정보는 Device Descriptor의 축소판의 모양을 하고 있다. 이 Descriptor의 목적은 High Speed와 Full Speed를 모두 지원하는 USB2.0을 위해 필요한 Descriptor이다. 밑에 나올 Descriptor가 High Speed의 정보를 위한 Desciptor라고 한다면 Full Speed의 정보를 나타내기 위해서 위의 Descriptor를 사용한다. Full Speed만 지원하는 USB1.1은  위의 Device Quality Descriptor가 필요없다.


 3. HighSpeed Configuration Descriptor

사용자 삽입 이미지

HighSpeed Configuration Descriptor


 그 다음으로 들어오는 Descriptor로서 몇 가지 중요한 정보를 담고 있다.  그 중에서 8번째 줄의 정보는 다음을 나타낸다.


b7 : USB Bus로부터 파워를 공급받는다면 1, 아니어도 1, (즉, 무조건 1)

b6 : 외부로부터 전원을 공급받는다면 1, 아니라면 0

b5 : remote wakeup을 지원한다면 1, 아니라면 0  (컴퓨터가 절전모드에 있을 때)                                    

 9번째 줄의 정보는 소모하는 최대 전류이다. 50이므로 이 장비는 전류를 최대 100mA 끌어당긴다.


 4. Interface Descriptor

사용자 삽입 이미지

 Interface Descriptor


 세 번째부터 설명하면 Zero-based index of this interface 라고 설명이 붙은 세 번째 바이트는Interface Descriptor의 윗 단계 Descriptor인 Configuration Descriptor에서 Number of interfaces항목(5번째 바이트)가 2이상일 때, 첫 번째 Interface Descriptor의 Interface Number는 0,두 번째 Interface Descriptor의 Interface Number는 1, 이런 식으로 일련번호가 들어가는 장소다.

 하나의 인터페이스는 여러 개의 세팅을 가질 수 있는데, 네번째 바이트인 Alternate setting 항목은 그 세팅의 일련번호를 나타낸다.


 5. Endpoint Descriptor

사용자 삽입 이미지

그림 16. Endpoint Descriptor


 마지막으로 USB 통신에서 실제 Endpoint 경로를 설정하는 Endpoint Descriptor를 설명하겠다.

 세번째 항목은 Endpoint Address를 나타낸다. 최상위 bit은 transfer의 방향 즉 0=OUT, 1=IN을 나타내고, 하위 4bit (bit 0:3) 은 Endpoint number를 나타낸다. Endpoint Number는 Index가 아님을 유의해야한다. Transfer의 방향 IN, OUT은 호스트의 입장에서 볼 때의 방향이다. 즉, IN은 데이터가 컴퓨터로 들어오는 것이고 OUT은 데이터가 호스트에서 디바이스로 흘러 들어가는 것을 말한다.
 FX2LP는 Endpoint 0, 1, 2, 4, 6, 8을 가질 수 있는데, 우리가 보고있는 이 예제의 desc.a51을 잘 보면 Endpoint 0과 1에 대한 Endpoint Descriptor가 없는 걸 알 수 있다. 왜냐하면 Endpoint 0에 관한Descriptor는 존재하지 않기 때문이다.
 네 번째 Attribute(;;Endpoint type) 항목에서 하위 2bit는 Transfer Type을 나타낸다.
00(0)=Control,  01(1)=Isochronous,  10(2)=Bulk,  11(3)=Interrupt
나머지 비트들은 Transfer Type이 Isochronous일 때만 해당하는 것이다.
 다섯 번째, 여섯 번째 Max Packet Size항목은 하위 11 bit이 하나의 패킷에 담을 수 있는 최대 데이터 량을 나타낸다. Full Speed에서 Bulk는 8, 16, 32, 64 Byte 중 하나이고, Isochronous는 최대 1023 Byte, High Speed에서 Bulk는 최대 512 Byte, Isochronous는 최대 1024 Byte 이다.
 일곱 번째 Polling interval 항목은  몇 프레임(High Speed에서는 uFrame) 마다 데이터를 polling 하느냐를 나타내는 항목이다. Isochronous와 Interrupt Transfer에서만 적용된다.


여기까지 USB의 각종 Descriptor의 구조와 기능에 대해서 알아봤다.

☆ 글쓴이 소개☆
용석정(18기)님의 글입니다.

Trackback Address :: http://blog.swssm.org/trackback/250
Name
Password
Homepage
Secret

OTG에 대해 :: 2008/08/05 21:42   by 송은두(17기)

‘USB On-The-Go’를 안다면 노트북에 USB 주변기기를 연결해 작업할 필요가 없다. USB OTG(On-The-Go)는 소형 휴대용 디바이스 간의 USB 통신을 간소화하는 기술이다. 현재 USB 2.0 사양에는 새로운 호스트-주변기기 관계를 정의하고, 하우스키핑 프로토콜을 지정하며, 저전력 모드를 설정하고, 휴대 기기에 작은 USB 커넥터를 제공하는 ‘On-The-Go’ 기능이 포함돼 있다.

대부분의 설계 엔지니어들은 USB의 표준 호스트-주변기기 통신에 대해 알고 있다. 물론, 호스트로 사용되는 PC, 주변기기로 작동하는 프린터, PDA 같은 디바이스를 포함해서 말이다. 그렇지만 OTS 사양은 PC 외의 디바이스에 대한 방법을 정의해 주어 주변기기와의 직접적인 통신을 할 때 제한된 호스트 역할을 가정한다. 중간에 PC 없이 컬러 프린터와 디지털 카메라를 직접 연결하는 것을 생각해 보면 쉽게 이해할 수 있을 것이다. 이러한 연결은 특정 디바이스가 항상 호스트의 역할을 하는 관계로 P2P 연결은 아니다.

USB OTG 영역에서 어떤 디바이스는 두 가지 역할을 한다. 즉, 호스트와 주변기기의 역할을 하는 것이다. 앞서 언급한 컬러 프린터는 PC에 연결돼 있을 때 주변기기로 작동하고, 디지털 카메라에 연결되면 호스트의 역할을 한다. 마우스와 키보드 같은 디바이스는 주변기기의 역할만 한다. OTG 작동은 USB 2.0 사양을 보완하기 때문에, 기존의 USB 디바이스는 OTG 가용(enabled) 디바이스와 함께 작동할 수 있다. 또한 각 케이블의 끝에 OTG 디바이스를 연결할 필요가 없다.

OTG 가용 디바이스는 Mini-A 또는 Mini-B 플러그를 꽂을 수 있는 새로운 Mini-AB 콘센트를 사용한다. 그래서 OTG 호환 케이블의 경우 한 쪽 끝에는 Mini-A 플러그를 제공하고 다른 쪽에는 Mini-B 플러그를 제공한다(호스트 전용 디바이스는 Mini-A 콘센트를 제공하고, 주변기기 전용 디바이스는 Mini-B 콘센트를 제공한다). USB 표준이 네 가지 신호를 지정했음에도 불구하고, ‘Mini’ 커넥터에는 연결된 디바이스를 호스트나 주변기기로 식별하는 다섯 번째 신호가 포함되어 있다. Mini-A 플러그는 이 ID 핀을 단락시켜 호스트로 작용하는 로컬 전자기기에 신호를 보내기 위해 접지한다(그림1). 한편, Mini-B 플러그는 ID 핀이 연결이 끊긴 상태로 유지하고, 연결된 디바이스에서 주변기기로 작동하도록 경고한다. 이런 연유로, 두 OTG 디바이스를 연결하는 케이블의 방향은 호스트-주변기기 관계를 결정한다.



플러그 방향은 연결된 OTG 디바이스가 HNP(Host-Negotiation Protocol) 세션을 반대로 만드는 초기 구성을 결정한다. 사용자가 OTG를 지원하는 PLC(프로그래머블 로직 컨트롤러)와 PDA를 연결했다고 가정해 보자. 케이블 방향이 PDA를 호스트로 설정하고 PLC를 주변기기로 설정한다. 하지만 PLC에 더 많은 처리 능력이 있고 더 많은 데이터를 저장하므로 HNP 세션은 PDA를 주변기기로 작동하도록 구성하고 PLC를 호스트로 작동하도록 구성한다. 하지만 OTG 프린터에 연결하면 PDA가 호스트로 작동한다.
또한 USB OTG 사양에는 주변기기가 OTG 호스트에서 서비스를 요청하도록 허용하는 SRP(Session-Request Protocol)가 포함된다. OTG 연결을 통해 통신이 되지 않으면 호스트 디바이스가 USB 전원 출력(VBUS)을 꺼서 전원을 절약한다. 서비스를 요청하기 위해 OTG 주변기기는 VBUS 전력선에 펄스를 발생시켜 호스트를 “깨운다”. OTG 호스트가 응답을 하고 버스 동작이 두 디바이스 간에 시작된다(또한 OTG 주변기기는 VBUS 전력선을 모니터링함으로써 표준 USB 호스트에서 제공하는 전원이 인가된 VBUS 전력선에 펄스가 발생하지 않도록 한다).



제품에 OTG 기능을 추가하려는 엔지니어는 소프트웨어와 IC에서 소프트웨어 디바이스와 USB 스택에 이르기까지 설계 작업을 간단하게 해주는 다양한 부품이 있다는 사실을 알게 될 것이다. TransDimension(www.transdimension.com)의 제품 마케팅 디렉터인 Paul Liu씨는 다음과 같이 말한다. “설계 엔지니어들은 OTG 기능 탑재를 너무 쉽게 생각하는 경향이 있다. 임베디드 시스템에 USB 기능을 구현하는 것은 사소한 작업이 아니므로, 제품에 USB-호스트 또는 USB-OTG 기능을 채용할 때 주의해야 한다. 우선 단계적으로 우선 호스트와 주변기기 기능이 시제품에서 작동하도록 해보는 것이 좋다. 그러면 OTG 호스트 디바이스 기능을 추가하기가 한결 수월해질 것이다.”

TransDimension은 다양한 OTG 제품을 공급하고 있다. 예를 들어, TD1120 칩은 x86, XScale, StrongARM, ARM9, PowerPC 등의 마이크로프로세서와 직접 상호작용을 한다. 이 회사의 USB 소프트웨어 스택은 많은 RTOS와 함께 동작하고, USB 클래스 드라이버에는 프린터, 대용량 스토리지, 기타 디바이스 형태가 포함된다. Liu씨는 “엔지니어들은 USB 접근방법을 선택하기 전에 요구사항을 분명히 명시해야 한다”면서, “결정하는 것을 마지막까지 미뤄뒀다가 중요한 하드웨어나 소프트웨어 리소스가 부족한 것을 발견하는 경우가 있는데, 이러한 경우 예상보다 느리게 USB를 연결하게 된다”고 설명했다.

SMSC(www.smsc.com)는 OTG 설계를 단순화하는 표준 프로세서측 인터페이스를 제공하는 USB3300, USB3500 같은 IC를 제조한다. USB3300은 외장 USB 2.0이나 USB OTG 디바이스에 물리적 인터페이스(PHY)를 제시하고, FPGA나 ASIC 같은 프로세서에 표준 12 신호 인터페이스를 제시한다(그림 2). 표준 ULPI(UTMI Low Pin-count Interface)를 사용하면 USB나 USB OTG 포트를 디바이스에 추가하는 작업이 간단해진다. UTMI는 Intel에서 개발한 USB 2.0 TMI(Transceiver Macrocell Interface)를 의미한다(추가 정보 참조). 매크로셀은 로우 레벨 USB 프로토콜, 신호•비트 조작 기능을 처리한다. OTG 기능을 나중에 추가할 계획이라면 USB3300 칩의 USB 기능을 먼저 사용한 후 나중에 OTG를 실행해야 한다.



또한 엔지니어들은 OTG 주변기기의 전력 요구사항을 고려해야 한다. USB 2.0 호스트는 외부 디바이스에 대해 5V에서 500mA(또는 Bus-powered 허브에 대해 100mA)를 공급해야 한다. 하지만 OTG 사양은 VBUS 전력선의 5V에서 최소 8mA를 요구한다. AnalogicTech(www.analogictech.com)의 제품 마케팅 매니저인 Erik Ogren씨는 “대부분의 주변기기는 그 이상의 전원이 필요하다”며, “아쉽게도 리튬 이온이나 리튬 폴리머 배터리로 구동되는 디바이스는 대개 VBUS 출력에 대해 간단히 구할 수 있는 5V를 공급하지 못한다”고 말했다. 참고로, AnalogicTech AAT3125에는 소수의 외부 커패시터만 필요한 100mA 전하 펌프 회로가 포함된다. 아울러 VBUS 전압을 모니터링하고 SRP(Session-Request Protocol)뿐만 아니라 전압 제한을 알려주는 4개의 전압 비교기가 포함된다. Ogren씨는 “USB 칩 공급업체가 OTG PHY와 동일한 IC에 100mA의 전하 펌프 회로를 제공하기는 어렵다”면서, “전용 칩을 사용해 OTG VBUS 전력선에 전원을 공급하는 것이 합리적인 방법”이라고 강조했다.

☆ 글쓴이 소개☆
송은두(17기)님의 글입니다.

Trackback Address :: http://blog.swssm.org/trackback/249
Name
Password
Homepage
Secret

GPIF(General Programmable Interface) :: 2008/08/05 21:15   by 조준희(18기)

우리가 제작한 USB Host to Host Bridge cable에 사용되는 칩은 이전 블로그에 말한 바와 같이 FX2LP입니다. 이 칩은 USB 하이 스피드(480 MBits/sec)를 지원하나 실질적으로 CPU를 enhanced 8051을 사용하므로 이것만으로는 모든 대역폭을 활용할 수 없습니다. 이와 같은 문제를 해결하기 위해 GPIF라는 코어를 사용합니다. 이번 블로그에서는 GPIF에 대한 설명과 이를 프로그래밍 하는 방법에 대해 소개하겠습니다.

GPIF(General Programmable Interface)

The GPIF is a flexible 8-bit or 16-bit parallel interface driven by a user programmable finite state machine. It enables the FX2LP to perform local bus mastering and can implement a wide variety of protocols such as ATA interface, printer parallel port, and Utopia.

위의 내용은 데이터 시트에 나온 GPIF에 대한 아주 간략한 설명입니다. 이를 좀 더 구체적으로 설명하자면, GPIF는 최대 7개의 state를 가지는 state machine입니다. state machine이라 함은 Microprocessor를 뜻하며, 어떤 조건에 의해 한 state에서 다른 state로 넘어가거나, 그냥 그 상태에 머물거나 하는 일을 하는 machine을 말합니다. 즉, GPIF는 아주 단순한 형태의 CPU라 생각하면 되고, 이를 사용하는 이유는 FX2LP에서 사용하는 8051이 사용할 수 있는 최대 클럭인 48Mhz로 동작한다고 하더라도 High Speed USB의 대역폭을 데이터로 다 채우기에는 너무 느리기 때문입니다. 느린 8051을 대신해서 USB로 보낼 데이터를 FIFO에 채우거나, FIFO에 도착한 데이터를 FX2LP 외부로 내보내는 역할을 합니다. 8051은 USB와 GPIF를 세팅하고 실제 데이터를 내보내고 가져오는 일은 GPIF가 모두 처리합니다.

GPIF 역시 일종의 프로세서이므로 입력과 출력이 있고, 이를 프로그램을 해 줘야 동작을 합니다. Master에서 GPIF를 이용하여 두 FX2LP 사이의 데이터 흐름을 제어하며, Slave에서는 Auto 모드로 동작함으로서 모든 제어권을 마스터에게 넘깁니다. 즉, 마스터에 해당하는 FX2LP에 GPIF를 통한 입, 출력을 프로그램 해주어야 하며, 이를 프로그램하기 쉽게 해주는 툴이 GPIF Designer입니다. GPIF Designer를 통해 작성해줘야 할 부분은 크게 3가지 입니다. Block Diagram과 FIFO Read/FIFO Write waveform을 작성해 줘야 하며, 가장 먼저 작성해야 할 부분은 Block Diagram으로 다음에 작성하는 waveform에서 이용할 파라미터들과 기본적인 환경 설정을 해줍니다.

Block Diagram

사용자 삽입 이미지
그림 1. Block Diagram

Block Diagram을 통해 읽기와 쓰기에 관한 waveform에서 이용할 기본적인 환경 설정을 합니다. 칩 선택 및 클럭 설정, 데이터 버스 선택, RDY Line 설정과 CTL Line 설정 등을 통해 실제적으로 읽기와 쓰기에 사용할 파라미터와 환경을 설정할 수 있습니다.

FIFO Read

GPIF Designer를 통해 4개의 waveform을 작성할 수 있습니다. Single Read/Write는 FIFO에 한 바이트(워드)씩 읽거나 쓰기 위한 것이며, FIFO Read/Write는 한번에(GPIF가 시작되어 그 사이클을 끝낼 때까지)여러 바이트(워드)의 데이터를 읽거나 쓰기 위한 것입니다. 이 중에서 FIFO Read/Write를 사용하여 데이터를 전송을 하였습니다.

사용자 삽입 이미지
그림 2. FIFO Read waveform

FIFO Read는 다음과 같은 순서를 따릅니다.

s0 : Slave의 empty 플래그를 살펴봅니다. 만약 Slave가 'not empty'이면, s1으로 진행하고 아니면 s6으로 진행합니다. s6으로 가면 인터럽트는 트리거되고 waveform은 중단됩니다.
s1 : SLRD strobe를 assert하고 tRDpwl 파라미터가 충족할 때까지 3 cycles 기다립니다.
s2 : data bus에서 읽어옵니다.
s3 : IDLE로 분기합니다.

FIFO write

사용자 삽입 이미지
그림 3. FIFO write waveform


FIFO Write는 다음과 같은 순서를 따릅니다.

s0 : Slave의 full 플래그를 살펴봅니다. 만약 Slave가 'not full'이면, s1으로 진행하고 아니면 s6으로 진행합니다. s6으로 가면 인터럽트는 트리거되고 waveform은 중단됩니다.
s1 : SLWR strobe를 assert하고 데이터 버스를 동작시키며, tWRpwl 파라미터가 충족할 때까지 3 cycles 기다립니다.
s2 : SLWR을 Deaasert하고 FIFO 포인터를 증가시킵니다.
s3 : IDLE로 분기합니다.

- Reference
EZ-USB Technical Reference Manual, cypress

 

☆ 글쓴이 소개☆
조준희(18기)님의 글입니다.

Trackback Address :: http://blog.swssm.org/trackback/248
Name
Password
Homepage
Secret

리눅스 블루투스 스택 BlueZ :: 2008/08/04 15:22   by 송은두(17기)

본 프로젝트에서는 리눅스에서 블루투스를 컨트롤 하기 위해서
 BlueZ를 사용하였습니다.

1. BlueZ 라이브러리 소개
암보드의 리눅스 상에서 블루투스 장비를 프로그래밍 하기위해서는 보통 BlueZ 라이브러리를 이용합니다. (씨리얼 방식으로 통신하기도 하는 듯합니다.)
BlueZ 라이브러리는 리눅스 환경에서 Bluetooth 무선 표준 스펙을 구현한 구현물입니다. 공식적으로 이 프로젝트는 Kernel 2.4, 2.6 을 지원합니다.
http://www.bluez.org/


2. BlueZ 라이브러리 설치 및 설정
리눅스 상에서 BlueZ 를 동작하도록 하기 위해서는 우선 라이브러리를 설치하였습니다.
http://www.bluez.org/download.html

그리고 BlueZ 라이브러리의 최신버전을 받아서 컴파일 뒤 설치하엿습니다.
이때, BlueZ 라이브러리를 구동하는 환경이 커널 2.4 시리즈인 경우 커널상에 Bluetooth 스택이 올라가있지 않은 경우가 있습니다. 이 경우 패치 커널에 적용하고 다시 설치해야만 정상적으로 블루투스를 이용할 수 있습니다.

hciconfig

만약, 리눅스 커널이 삽입된 동글을 인식했다면 hci0 라는 디바이스가 잡힐 것 입니다.

hciconfig hci0 up

명령어를 이용해서 해당 디바이스를 활성화시키시면 모든 준비작업이 끝납니다.
그리고 hcitool 명령을 사용해서 주변 블루투 디바이시를 검색 해보았습니다.

사용자 삽입 이미지

☆ 글쓴이 소개☆
송은두(17기)님의 글입니다.

Trackback Address :: http://blog.swssm.org/trackback/247
  • Edwood | 2008/08/08 17:24 | PERMALINK | EDIT/DEL | REPLY

    Haha. I'm Seokhwan. As you may know, I was a 7th member of SSM. I'm proud that you are working hard. Anyway, I think he is the manager Ahn in the upper right picture. Please give him my best regards.

Name
Password
Homepage
Secret

블루투스를 이용한 차량용 FOTA(Firmware update Over The Air) 시스템 파일 전송 및 DB :: 2008/08/04 11:22   by 엄은용(18기)

가급적 최대 속도로 데이터를 전송하고 프레임화, 다중화 기능을 가진 간단하면서 신뢰성 있는 Bluetooth 프로토콜인  RFCOMM은 FOTA 시스템에서 메시지 및 파일을 전송하기에 적당합니다.

파일 스트림 전송은 전송완료 후 소켓을 닫아야 하기 때문에 메시지를 보내는 소켓과 다른 채널을 사용하기로 하였습니다. 그리하여 RFCOMM 채널 1에서는 메시지를 전송하고 채널 2에서는 파일 스트림을 전송하는 방식을 취하였습니다. 차량용 FOTA의 시스템의 Sequence Diagram은 아래 그림과 같습니다.

사용자 삽입 이미지

하지만 아래 그림과 같이 파일 스트림의 전송이 완료되고 소켓을 Shutdown할 시에 다른 채널의 송수신을 방해하는 현상이 발생하였습니다.

사용자 삽입 이미지

그리하여 파일 전송 시에는 메시지 전송 소켓을 닫아 송수신에 방해를 받지 않도록 하였습니다. 최종적으로 구현된 차량용 FOTA 시스템은 아래와 같은 Sequence Diagram을 같습니다.