페이지

글목록

레이블이 OTP인 게시물을 표시합니다. 모든 게시물 표시
레이블이 OTP인 게시물을 표시합니다. 모든 게시물 표시

2016년 3월 3일 목요일

[dialog] DA14580 boost mode FLASH/DEBUG/RESET

어제 부스트 모드의 동작 및 JTAG 연결, 회로도 등에 대해서 궁금한 것이 있어서,

다이얼로그사에 기술지원 메일을 보내서 얻은 답변을 공유합니다.

먼저 저의 질문은 다음과 같습니다.
이번에 1.5V 알카라인 밧데리를 사용하는 보드를 검토하는 중인데,몇 가지 질문사항이 있습니다.

1.     전원이 1.5V 이므로 SPI FLASH 메모리는 사용할 수 없겠죠부스트 모드 에서는 OTP 만 사용하는 것으로 보면 되나요?
2.     JTAG 로 프로그램을 다운로드할 때JTAG VBAT은 어떻게 연결해야 하나요? (VBAT1V  VBAT3V 중 어디에 연결해야 하는지회로도 PDF로 첨부합니다. VBAT3V에 연결하는 것으로 보이지만 검토 부탁 드립니다.)
3.     DA14580을 부스트 모드에서 Product Line Tool 을 사용하고자 할 때에도VBAT은 어떻게 연결해야 하나요? (VBAT1V / VBAT3V ? )
4.     Product Line Tool 이나 JTAG  DA14580 을 연결할 때RESET 핀을 연결해야 하나요? (지금까지 연결을 안하고 다운로드 했었는데필요 없다면 핀을 외부로 빼지 않을 생각입니다만..)



답변 내용 입니다.
1.     전원이 1.5V 이므로 SPI FLASH 메모리는 사용할 수 없겠죠부스트 모드 에서는 OTP 만 사용하는 것으로 보면 되나요?

è     Boost mode 사용 하시더라도 따로 S/W I/O 전압을 1.8V 변경하지 않으시면 DA14580 3.0V 전원이 됩니다입력 전원만 1.5V  사용 Boost  거쳐 DA14580 필요한 3.0V 전압을 생성합니다.
è     아무래도 입력전원이 1.5V 이므로 Flash memory 용도로 따로 외부에 boost  convertor 단품을 추가 하셔야   같습니다.
è     아니시면  입력 전압이 1.8V  Flash memory 단품을 이용하시고,  DA14580 I/O 1.8V setting 하셔서 사용하는 것도 방법이   있을  같습니다.     

2.     JTAG 로 프로그램을 다운로드할 때, JTAG VBAT핀은 어떻게 연결해야 하나요? (VBAT1V  VBAT3V 중 어디에 연결해야 하는지회로도 PDF로 첨부합니다. VBAT3V에 연결하는 것으로 보이지만 검토 부탁 드립니다.)

è     앞에 말씀 드린 대로 DA14580 boost mode 사용 하셔도 1.8V S/W setting 변경하지 않으시면 DA14580 3.0V 입니다.   
è     기존 Buck mode 대로 JTAG pad  3.0V 동일 합니다.

3.     DA14580을 부스트 모드에서 Product Line Tool 을 사용하고자 할 때에도, VBAT핀은 어떻게 연결해야 하나요? (VBAT1V / VBAT3V ? )

à Boost mode로도 모두 지원 가능합니다.

4.     Product Line Tool 이나 JTAG  DA14580 을 연결할 때, RESET 핀을 연결해야 하나요? (지금까지 연결을 안하고 다운로드 했었는데필요 없다면 핀을 외부로 빼지 않을 생각입니다만..)

è     간혹 Reset  필요한 경우가 있을  있으므로 RESET  Pin 외부로 배선 부탁 드립니다

2015년 12월 19일 토요일

[DA14580] OTP 메모리 쓰기.

안녕하세요,

이번엔, Dialog 사의 BLE 통신 칩인 DA-14580의 OTP 메모리 쓰는 방법을 포스팅 합니다.

그냥 0.9V~3.6V 의 전원 전압만 있어서는 안되는데, 
이 점을 간과하고 넘어가서, 회로를 한번 바꿔야 할 것 같습니다.

만약 이 칩을 사용하시려 한다면 처음부터 6.8V 를 VPP에 인가할 수 있도록
H/W를 설계하시기 바랍니다.

메뉴얼을 읽어보면, 다음과 같은 내용이 있습니다.
Please note, 6.8V can only be applied to VPP after VBAT3V is supplied and 6.8v must be
removed from VPP before the supply to VBAT3V is removed. Otherwise the chip could be
damaged.The 6.8V supply must be applied without ringing. The overshoot could also cause
damage.

VBAT3V에 전원을 인가한 후에 VPP에 6.8V를 인가하고,
VBAT3V에 전원을 제거한 후에, VPP에서 6.8V를 제거하라.
6.8V 는 리플이 없게 하라.
위의 순서를 지키지 않거나, VPP에 오버슛이 있을 시 칩에 손상이 있을 수 있다..
이런 내용입니다.



먼저 VPP 핀에 입력할 6.8V 를 만들어야 하므로, 개발 키트에서 일단 Copy해서 온 회로도는 다음과 같습니다.
PC의 USB 5V에서 6.8V 를 만드는 회로 입니다.

다음은 특정 IO를 지정해서 위에서 언급한 VBAT 과 VPP 를 인가하는 타이밍을 smartsnippets 프로그램에서
자동으로 ON/OFF 하도록 하는데 필요한 VPP 전원 ON/OFF control 회로도입니다.
이것도 개발 킷트 에서 공개된 회로도 입니다.


윈도우 개발 환경 프로그램인 Smartsnippets 에서 VPP를 On/Off 시키는 I/O 를 지정할 수 있게 되어 있습니다.


OTP 프로그램을 하려고 여러가지 알아보다 보니, 현재 smartsnippets 프로그램의 오류가 하나 있었습니다.
버전 3.8에서 NVDS OTP Write 기능에서 BD ADRESS 항목이 수정이 안되는 점인데, Dialog 사의 지원팀에 문의해서
답변으로 "이상이 있으니 본사에 조치를 취하도록 요청을 한다"고 하네요.

저는 안써저서 HEX 파일을 수정해서 다시 읽어서 현재 쓰고 있습니다. ^^


오늘(2015-07-10, 오후 2:20) 테스트한 내용.
1. VBAT3V 에 리튬 밧데리(3V)를 연결하고 점퍼로 VBAT3V 를 ON/OFF 할 수 있도록 했다.
2. VPP 와 GND에 선을 연결해서 디지탈 가변 파워 서플라이에 연결했다.
3. 위의 내용 처럼 IO에 의해 자동으로 제어하지는 않고, VBAT3V 를 ON 하고 VPP에 6.8V 를 순서대로 ON
4. NVDS OTP Write 시 Warning 이 뜹니다. 그냥 진행 했음.
5. 쓰기 성공 & 전원 껐다 키고 읽어 보니 내용이 남아 있음.
6. APP program 은 SPI 에 넣고 NVDS 데이터는 OTP에서 읽어서 사용하려고 했는데, 엉뚱한 값이 나옵니다.
   이것은 또 다이얼로그 지원팀에 물어봐야겠습니다. 에구 속터지네요. 

[1,2] H/W 세팅

[4] 워닝 내용 (에러는 어제 내용 인데 굽고 나서 캡쳐를 못해서 어제 이미지를 사용)

[5] 쓰고 나서 읽어본 내용 (Smartsnippes 프로그램을 사용) : 잘 들어가 있습니다.

[6] 비콘 데이터 수신 내용. NVDS에 쓴 내용이 안나옴.




Dialog korea 기술 지원 팀에서 답변을 받아서 문제를 해결한 내용을 올려 봅니다.

In nvds.c

voidnvds_read_bdaddr_from_otp()

{
#ifdefBDADDR_FROM_OTP
#ifndef APP_BOOT_FROM_OTP   
    intcnt = 100000;
#defineXPMC_MODE_MREAD   0x1
   uint8_t *otp_bdaddr = (uint8_t *)0x40000 + BDADDR_FROM_OTP;   //wherein OTP header is BDADDR
   
    SetBits16(CLK_AMBA_REG,OTP_ENABLE,1);                // enable OTP clock        
   while ((GetWord16(ANA_STATUS_REG) & LDO_OTP_OK) != LDO_OTP_OK &&cnt--)
       /* Just wait */;
       
    //set OTP in read mode
    SetWord32(OTPC_MODE_REG,XPMC_MODE_MREAD);
# else
   uint8_t *otp_bdaddr = (uint8_t *)0x20000000 + BDADDR_FROM_OTP;  //where in OTP header is BDADDR
# endif//APP_BOOT_FROM_OTP

#ifdefREAD_NVDS_STRUCT_FROM_OTP
   memcpy(nvds_data_ptr, (uint8_t *)0x40000, sizeof(struct nvds_data_struct));
#endif //READ_NVDS_STRUCT_FROM_OTP

   memcpy(&dev_bdaddr, otp_bdaddr, sizeof(dev_bdaddr));
   SetBits16(CLK_AMBA_REG, OTP_ENABLE, 0);     //disable OTPclock    
# ifdefSUPPORT_1_8_V
       SetBits16(DCDC_CTRL2_REG, DCDC_VBAT3V_LEV, 0x0);   //Support 1.8Vboot
# endif//SUPPORT_1_8_V
#endif//BDADDR_FROM_OTP
}

위의 붉은 글씨로 된 부분을 소스코드에 추가했더니, NVDS OTP에 쓴 데이터가 휴대폰 APP에서
나타났습니다.


Smartsnippets 프로그램에서 보드 어드레스 수정하는 부분은 어떻게 되고 있는지 ,  현재 답변을
기다리는 중입니다.