'DSP2812'에 해당되는 글 4건

  1. 2009.06.14 TMS320F2812 CAN Remote Frame 구현 2
  2. 2009.06.14 TMS320F2812 eCAN 예제 소스
  3. 2009.04.12 DSP2812 CAN 통신 시작, 종단 저항
  4. 2009.04.12 DSP2812 MP/MC Setting
Studyhard/DSP2009. 6. 14. 20:29
CAN 통신은 각각 ID 를 갖고 있어, 손쉽게 통신이 가능한, 그리고 튼튼한(노이즈에 강한) 통신이다. 
자동차 전장 부분에서 쓰이는 통신이므로, 노이즈 부분에서는 믿을 만하다고 할 수 있겠다.

1:1 통신 부터 1:多, 多:多 까지 무리없이 수행할 수 있는 것이 장점이다.

통신 우선 순위는 각각 ID가 수치적으로 낮은 (ex: 000000 >> 000001) 것이 우선권을 갖게 된다.

그러나 대학원 프로젝트를 진행 중, 막상 CAN 통신을 하는 중에 문제점이 발견 되었다.
현재 프로젝트에서 캔 통신의 아이디는

Master : ID 0
Slave   : ID 1, ID 3, ID 5 

위와 같이 각기 구성 되어 있는데, Slave에서 동시다발적으로 Master에게 데이터를 캔통신으로 넘기면, 
Master에서는 ID가 낮은 Slave의 데이터만 받는 현상이 발생되었다. 

그래서, CAN통신을 살펴보니 Remote Frame 이라는 부분이 있었다. 

Remote frame은 Data를 받기를 원하는 Master Node에서 해당 ID의 Slave에 Remote Frame을 보내게 되면, 
해당 ID가 일치하는 Slave에서 Master Node 에게 Data Frame을 보내주는 것이다.

즉, Master에서 원하는 Slave의 데이타를 마음대로 어느 때나 가져올 수 있다는 것이다. 

아래는 Remote Frame으로 TMS320F2812를 이용해 코딩한 소스이다.

 Remoteframe 송신측(Data를 받는 쪽) RemoteFrame  수신측(Data를 보내는 쪽) 
 //Can Module Initialize
 //Mailbox 2 Initialize
 ECanaMboxes.MBOX2.MDH.all = 0x00000000;
 ECanaMboxes.MBOX2.MDL.all = 0x00000000;

 //MSGID Set, IDE=1, Ext Identifier
 ECanaMboxes.MBOX2.MSGID.all = 0x8AAAAA02;

 //Mailbox 2 Enable
 ECanaRegs.CANME.bit.ME2 = 1;

 //RTR bit Set 
 ECanaMboxes.MBOX2.MSGCTRL.bit.RTR = 1;

 //DLC = 8 bit 
 ECanaMboxes.MBOX2.MSGCTRL.bit.DLC = 8;

 //Mailbox 2 Receive Set
 ECanaRegs.CANMD.bit.MD2 = 1;

 //Can Module Initialize
 //MSGID Set, IDE=1, AAM=1, Ext Identifier
 ECanaMboxes.MBOX2.MSGID.all = 0xAAAAAA02;  

 //Mailbox 2 Transmit Set
 ECanaRegs.CANMD.bit.MD2 = 0;

 //Mailbox 2 Enable
 ECanaRegs.CANME.bit.ME2 = 1;

 // DLC = 8bit
 ECanaMboxes.MBOX2.MSGCTRL.bit.DLC = 8;

 //Mailbox 2 Initialize
 ECanaMboxes.MBOX2.MDL.all = 0;
 ECanaMboxes.MBOX2.MDH.all = 0;

 //Clear TA Set
 ECanaRegs.CANTA.bit.TA2 =1;

 //Remote Frame Send
 //Mailbox 2 Reset
 ECanaRegs.CANME.bit.ME2 = 0;
 ECanaMboxes.MBOX2.MSGCTRL.bit.RTR = 1;
 ECanaMboxes.MBOX2.MSGCTRL.bit.DLC = 8;
 ECanaRegs.CANME.bit.ME2 = 1;

 //Send Remote Frame
 ECanaShadow.CANTRS.all = 0; 
 ECanaShadow.CANTRS.bit.TRS2 = 1;
 ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all;

 //Read MailBox
 rd0.l = ECanaMboxes.MBOX2.MDL.all;
 rd1.l = ECanaMboxes.MBOX2.MDH.all; 

 //Mailbox Data Update
 ECanaMboxes.MBOX2.MDL.all = rd2.l;
 ECanaMboxes.MBOX2.MDH.all = rd3.l;
 


여기서 중요한 것은 RemoteFrame 송신측에서 RTR과 DLC부분을 Reset 시켜 준다는 부분이다. 
저 부분을 뺀다면, RemoteFrame이 한번밖에 송신이 되지 않는 걸 확인 할 수 있었다. 

첫 칸에 있는 CAN Module Initialize 부분은 초기 셋팅 설정하는 부분이고
두번 째 칸에 있는 부분만 함수화 하여, 요청과 응답 부분으로 쓰면 될 것이다.





Posted by 리얼한놈
Studyhard/DSP2009. 6. 14. 19:55

CAN 통신을 구현하다 TI 홈페이지에서 예제 프로그램을 찾았다. 
CAN 통신 예제가 19개가 있으며, 2812에 맞게 코딩되어 있다. 


출처 : www.ti.com
Posted by 리얼한놈
Studyhard/DSP2009. 4. 12. 01:55
CAN 통신을 구현할 경우,

Can 통신의 특성 상 여러 대를 통신할 경우가 생긴다.

시작 -> can1 ->can3 -> can5 (종단) 

이번 프로젝트 할 때, 확인 했던 부분인데, 그림에서 R46 저항을 시작과 끝에만 달아 주어야 한다.

하지만,  보드 자체가 동일한 구조 이기 때문에, 저항을 달고 떼는 작업이 여간 귀찮은 게 아니다.

그래서 회로도와 같이 점퍼를 셋팅해주는 것만으로, Can 통신의 저항 부분을 조정해준다.
Posted by 리얼한놈
Studyhard/DSP2009. 4. 12. 01:50

사진에서 빨간 네모칸으로 된 부분이 DSP2812 를 MPU로 쓸거냐 MCU로 쓸거냐를

셋팅해 주는 부분이다

풀업 = MPU
풀다운 = MCU

제대로 셋팅을 안 해주면, 파워온 리셋이 제대로 되지 않아, 오동작을 일으키기도 한다.
Posted by 리얼한놈