Microprocessor/DSP (TMS320F28x) FLASH API
  • 728x90
    반응형

     

    FLASH API


     

    FLASH API 란 무엇인가?

    📌 Flash API (Flash Application Program Interface)

    • TI에서 제공하는 라이브러리와 함수들의 집합
    • 사용자 Application 상에서 프로세서의 내부 플래시를 사용할 수 있음

     

     

    📌 Flash API가 제공하는 함수들

     

    함수명 설명
    Flash_Erase() Flash 에서 선택한 섹터를 Erase 해주는 함수
    Flash_Program() Flash 에서 데이터를 Program해주는 함수
    Flash_Verify() Flash 에서 데이터가 올바로Program 됐는지 검증해주는 함수
    Flash_ToggleTest() 프로그램의 Flash API 사용을 위한 클럭 설정이 올바로 됐는지 테스트 해주는 함수
    Flash_DepRecover() Flash 에서 Depletion된 섹터를 찾아내고 복구해주는 함수
    Flash_APIVersionHex() Flash API의 버전 정보를 출력해주는 함수
    Flash_APIVersion() Flash API의 버전 정보를 출력해주는 함수

     

     

    FLASH API는 언제 사용되나?

    📌펌웨어 업그레이드를 위해 에뮬레이터와 CSS의 도움 없이 플래시에 저장된 프로그램을 업그레이드 할 수 있음.

    • 개발자가 아닌 제품 사용자가 펌웨어 업그레이드하기 위해서는 필수적임.

     

    📌 데이터 로그를 위해

    • 프로그램 상에서 전원공급이 없더라도 데이터를 보존해야 하는 경우(예> 사용자 셋팅 정보, 수정 가능한 파라미터 정보, 각종 상태 정보)
    • 주의!! 데이터 로그 횟수가 빈번하다면 28x 내장 플래시 메모리는 적합하지 않음

     

     

    FLASH API의 사용 예

    📌 Flash Burning KIT

    • 28x 소켓모듈에 외부 메모리 모듈이 탑재된 모델
    • 메모리 모듈에는 Flash API가 사용된 부팅 프로그램이 저장되어 있음
    • 에뮬레이터나 CCS 없이 사용자 프로그램을 플래시에 구울 수 있음

     

     

    📌 원격 플래시 업데이트 솔루션

    • 사용자 프로그램 실행 중 업데이트 가능/별도의 하드웨어 조작이 필요 없음
    • USB, Bluetooth, RS-232C를 통한 유,무선 업데이트 가능
    • 플래시 영역 업데이트 가능

     

     

     

    FLASH API 다운로드

    CCS 상단 메뉴 View > Resource Explorer 에서 "F2833x FLASH API" 검색 후 Libraries 다운로드

     

     

     

    FLASH API CHECKLIST

    📌 API을 사용하기 전 체크

    • Step1. User's 프로젝트 Flash API library 추가
    • Step2. 프로그램 소스에 Flash2833x_API_Library.h 파일 include
    • Step3. Flash281x_API_Config.h 파일 수정

     

     

    📌 사용자 어플리케이션에서 Flash API 함수를 사용하기 전 체크

    • Step4. PLL Control Register (PLLCR) 초기화
    • Step5. Flash API 함수들을 Internal SARAM으로 복사
    • Step6. Flash_CPUScaleFactor 초기화
    • Step7. Callback Function Pointer 초기화
    • Step8. Disable Global Interrupts
    • Step9. Code Security Module(CSM)을 확인한다.
    • Step10. (Optional) Frequency Toggle Test를 한다.
    • Step11. API의 함수 사용에 관한 룰을 숙지한다.

     

     

    📌 사용자 코드에서 Flash API 사용 시 체크

    • Step12. Flash API 함수들의 에러코드 리턴값을 항상 확인한다.

     

     

    FLASH API LIBRARY 추가

    📌 Step 1. User's 프로젝트에 Flash API Library 추가

    • 유저가 사용할 DSP의 Flash API 라이브러리 추가
    • Project -> Add Files

     

    📌 Step 2. 프로그램 소스에 Include the API Header File

    • Flash2833x_API_Library.h 파일을 include 한다.
    • Flash2833x_API_Library.h 파일의 역할
      • Interface Function prototypes
      • status structure definition
      • API error definitions
      • Flash sector mask definitions
      • Flash281x_API_Config.h 파일 include 
      • Etc...

    사용자 코드(main.c)

     

    📌 Step 3. Flash2833x_API_Config.h 파일 수정

    • API를 사용할 사용자 시스템의 Device와 CPU 클럭을 설정한다.

     

    Flash2833x_API_Config.h

     

    사용할 프로세서를 "1"정의하고 나머지를 "0"으로 정의

     

     

    알맞은 CPU 클럭을 지정한다. 사용할 CPU_RATE만을 주석에서 해제 한다.

     

     

    Flash API가 정상적으로 동작하기 위한 소프트웨어 딜레이 정의. 절대 수정하면 안 된다.

     

     

    PLL CONTROL REGISTER 초기화

    📌 Step 4. PLL Control Register (PLLCR) 초기화

    • PLLCR 레지스터를 초기화 하고 PLL을 안정화 시킨다.
    • "Step 3" 에서 설정한 CPU_RATE와 동일하게 맞춰주어야 한다.

     

    사용자 코드(main함수)

     

    DSP2833x_SysCtrl.c

     

     

    FLASH API를 RAM으로 복사

    📌 Step 5-1. Flash API를 Internal SARAM으로 복사

    • 만일 Flash API source가 Flash/OTP에 저장된다면 API의 함수들이 사용되기전에 반드시 API를 SARAM으로 복사한 뒤에 사용해야 한다.

     

    사용자 CMD 파일

     

    Flash283x_API_Library.h

     

    📌 Step 5-2. Flash API를 Internal SARAM으로 복사

    • 만일 Flash API source가 Flash/OTP에 저장된다면 API의 함수들이 사용되기전에 반드시 API를 SARAM으로 복사한 뒤에 사용해야 한다.

     

    사용자 코드(main 함수)

     

     

    DSP2833x_MemCopy.c

     

     

     

    FLASH_CPUSCALEFACTOR 초기화

    📌 Step 6. Flash_CPUScaleFactor 초기화

    • Flash API가 정상적으로 동작하기 위한 소프트웨어 딜레이 설정을 초기화 한다.
    • API의 올바른 동작을 위해 이 소프트웨어 딜레이의 올바른 타이밍은 극히 중요.

     

    Flash2833x_API_Config.h

     

    SCALE_FACTOR 공식은 이미 Flash281x_API_Config.h에 정의 되어 있다. 이 공식은 절대 수정되선 안된다.

    CPU_RATE는 Step 3에서 설정했다.

     

    Flash2833x_API_Library.h

     

    API에서 사용될 Flash_CPUScaleFactor의 매개변수가 Flash283x_API_Library.h에 선언돼 있다.

     

    사용자 코드(main함수)

     

     

    CALLBACK FUNCTION POINTER 초기화

    📌 Step 7. Callback Function Pointer 초기화

    • Callback Function Pointer는 Flash API의 함수들이 실행되는 도중에 실행되어야할 함수를 지정한다. 사용하지 않는다면 반드시 "NULL"값을 입력한다.
    • Callback Function Pointer가 지정되면 Flash API의 함수들의 실행 도중에 Safe time이 나올 때마다 Callback 함수를 호출 한다.

     

    사용자 코드(main함수)

     

     

     

     

    DISABLE GLOBAL INTRRUPTS

    📌 Step 8. Disable Global Interrupts

    • Flash API의 함수 수행 도중 time critical 해야 하는 코드를 인터럽트로부터 보호.
    • Flash API의 함수 수행 도중 safe time 동안에는 인터럽트 사용가능.

     

    Flash28335_API_V210.lib

     

     

    UNLOCK CSM

    📌 Step 9. Unlock the Code Security Module(CSM)

    • Flash API 사용 전 CSM기능은 비활성화 되야 한다.
    • CSM기능이 활성화 돼있으면 Flash API 사용에 제한이 생긴다.

     

     

     

     

    주파수 설정 테스트

    📌 Step 10. Frequency and PLL configuration toggle test

    • 이 테스트는 Flash API 사용을 위한 시스템 클럭 설정이 올바르게 설정됐는지 확인할 수 있다.

     

     

    FLASH API 사용시 알아야 할 룰

    📌 Step 11-1. Flash API 사용시 알아야 할 룰

    • Flash API의 Erase, Program, Depletion recovery 함수 수행 중 발생하는 인터럽트는 ISR에서는 Flash/OTP에 데이터를 쓸 수 없다.
    • Flash API의 Erase, Program, Depletion recovery 함수 수행 중 호출 되는 callback function 에서는 Flash/OPT에 데이터를 쓸 수 없다.

     

     

    📌 Step 11-2. Flash API 사용시 알아야 할 룰

    • ToggleTest API 함수는 인터럽트를 disable하고, 사용자가 프로세서를 멈출 때까지 계속 동작한다.
    • ToggleTest API 함수는 callback function을 호출하지 않는다.

     

     

    📌 Step 11-3. Flash API 사용시 알아야 할 룰

    • Erase 함수는 150MHz 시스템 클럭에서 최대 3~4ms 동안 인터럽트를 disable 한다.
    • Erase 함수는 150MHz 시스템 클럭에서 3~4ms 마다 callback function을 호출할 수 있다.
    • Flash API 함수는 사용될 때 watchdog을 disable 한다.

     

     

     

    FLASH API 사용 흐름 예

     

    • PLL control register 초기화
    • 시스템 클럭을 설정함 (Default : 150MHz)
    • Flash API는 실행 중 Software delay를 여러 번 사용함 Flash API 실행에 정확한 타이밍을 주기 위함
    • Flash API가 실행 중인 상황에서도 사용해야 하는 프로세스를 실행하기 위해 사용
    • Flash Erase : API의 함수를 사용해서 Flash에서 원하는 섹터를 Erase
    • Flash Program : API의 함수를 사용해서 원하는 Flash 영역에 데이터를 Program
    • Flash Verify : 플래시에 올바로 Burning 됐는지 검증

     

    FLASH API 사용 시 주의사항

    📌 해야 할 것 (DOs)

    • Flash API는 반드시 프로세서 내부 SARAM 영역에서 실행 되야 할 것
    • Flash API 사용을 위한 CPU 클럭 주파수 설정이 올바른지 확인할 것
    • PLL control register(PLLCR)은 반드시 Flash API 함수를 사용하기 전에 초기화 할 것
    • Flash API의 Callback function pointer를 반드시 설정할 것(사용하지 않으면 반드시 NULL 값으로 설정)

     

    📌 하지 말 것 (DON'Ts)

    • Flash API가 실행될 때는 인터럽트를 사용하지 말 것
    • Flash API의 함수가 사용될 때는 watchdog을 사용하지 말것
    • Flash API의 함수를 Callback Function 에서 사용하지 말것
    • Flash API가 실행되는 도중에 프로세서를 리셋 하거나 멈추지 말 것

     

    FLASH API 예제

    SyncWorks TR28335 LAB7.c

    /*============================================================================================
        헤더파일 선언 및 선행처리 지시구문 정의
    ============================================================================================*/
    #include "DSP28x_Project.h" 
    #include "Flash2833x_API_Library.h"
    
    #define BUFFER_LENGTH    128
    #pragma DATA_SECTION(ADC_buffer, "DMARAML7");    /* ADC 버퍼를 사용자 정의 섹션(DAMRAML7)에 배치 */
    
    #pragma CODE_SECTION(MyCallbackFunction,"ramfuncs");
    #pragma CODE_SECTION(Example_Done,"ramfuncs");
    
    #define NULL                     0  
    #define STATE_ON                 0x0001
    #define STATE_FLASH_ERASE        0x0002
    #define STATE_FLASH_PROGRAM      0x0003
    #define STATE_FLASH_VERIFY       0x0004
    #define STATE_OFF                0x0005  
    
    
    /*============================================================================================
        예제에서 사용되는 함수들 선언
    ============================================================================================*/
    /* Callback function.  Function specified by defining Flash_CallbackPt */
    void MyCallbackFunction(void); 
    Uint32 MyCallbackCounter;            /* Just increment a counter in the callback function */
    void Example_Error(Uint16);            /* If an error, stop here */
    void Example_Done(void);            /* If done, stop here */
    
    
    /*============================================================================================
        예제에서 사용되는 전역 변수들 선언
    ============================================================================================*/
    FLASH_ST FlashStatus;
    extern Uint32 Flash_CPUScaleFactor;
    Uint16  Status;
    
    Uint16    State = STATE_ON;
    Uint32    LEDcnt;
    
    Uint16 ADC_buffer[4][BUFFER_LENGTH];
    Uint16 i,j;
    
    extern Uint16 RamfuncsLoadStart;
    extern Uint16 RamfuncsLoadEnd;
    extern Uint16 RamfuncsRunStart;
    
    
    /*============================================================================================
        메인 함수 - 시작
    ============================================================================================*/
    void main(void)
    {
    
    /*============================================================================================
        단계 1. 전역 인터럽트 비-활성화 및 인터럽트 플래그 초기화
    ============================================================================================*/
        DINT;
        IER = 0x0000;
        IFR = 0x0000;
    
    
    /*============================================================================================
        단계 2. 시스템 컨트롤 초기화 (DSP2833x_SysCtrl.c 파일 참조)
    ============================================================================================*/
        InitSysCtrl();
    //    MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
    //    InitFlash();
    //    MemCopy(&Flash28_API_LoadStart, &Flash28_API_LoadEnd, &Flash28_API_RunStart);
        
    
    /*============================================================================================
        단계 3. 범용 입출력 포트(GPIO) 초기화
    ============================================================================================*/
        EALLOW;
        GpioCtrlRegs.GPAMUX1.all = 0x00000000;    /* GPIO0 ~ GPIO5, GPIO 기능으로 설정 */
        GpioCtrlRegs.GPADIR.all = 0x0000003F;    /* GPI00 ~ GPIO5, 출력으로 설정 */
        EDIS;
    
        GpioDataRegs.GPACLEAR.all = 0x0000003F;
    
    
    /*============================================================================================
        단계 4. Flash_CPUScaleFactor 설정
    ============================================================================================*/
    /*    Flash _CPUScaleFactor는 FLash API 함수에서 정의된 32비트 전역 변수다. 
        Flash API는 실행 중 소프트웨어적인 지연을 여러번 사용한다. 
        이 소프트웨어 지연의 올바른 타이밍은 API 함수가 실행되는데 있어서 극히 중요하다. 
        Flash _CPUScaleFactor는 칩의 시스템클럭(SYSCLKOUT)을 기초로 API 함수들이 정확한 시간의 
        소프트웨어 지연을 사용할 수 있도록 해준다.
    
        SCALE_FACTOR는  Flash2833x_API_Config.h 파일에 다음과 같이 정의되어 있다.   
        #define SCALE_FACTOR  1048576.0L*( (200L/CPU_RATE) )    */
    
        Flash_CPUScaleFactor = SCALE_FACTOR;
    
    
    /*============================================================================================
        단계 5. Flash_CallbackPtr 설정
    ============================================================================================*/
       Flash_CallbackPtr = &MyCallbackFunction; 
       LEDcnt = 0;                /* LED 점멸수 스케일링 */
       MyCallbackCounter = 0;    /* Increment this counter in the callback function */
    
    
    /*============================================================================================
        단계 6. 변수 초기화
    ============================================================================================*/
       for(i=0 ; i<BUFFER_LENGTH ; i++)
       {
               ADC_buffer[0][i] = 0;
               ADC_buffer[1][i] = 0;
               ADC_buffer[2][i] = 0;
               ADC_buffer[3][i] = 0;
       }
    
    
    /*============================================================================================
        단계 7. 전역 인터럽트 및 리얼타임 디버깅 인터럽트 활성화
    ============================================================================================*/
        EINT;    /* Enable Global interrupt INTM */
        ERTM;    /* Enable Global realtime interrupt DBGM */
    
    
    /*============================================================================================
        옵션.    Flash Sector H 영역 초기화 (Flash Sector H의 초기 값을 임의의 값들로 설정하기 위함)
                RAML0 영역(Start Address : 0x008000, Length : 0x400)의 데이터들을
                Flash Sector H 영역(Start Address : 0x300000, Length : 0x400)에 기록    
    ============================================================================================*/
        Status = Flash_Erase((SECTORH),&FlashStatus);
        
        if(Status != STATUS_SUCCESS) 
        {
            Example_Error(Status);
        }
    
        Status = Flash_Program((Uint16 *)0x300000,(Uint16 *)0x008000,0x400,&FlashStatus);
        
        if(Status != STATUS_SUCCESS) 
        {
            Example_Error(Status);
        }
    
    
    /*============================================================================================
        단계 8. 유휴대기 루프 (Idle-loop)
    ============================================================================================*/
        for(;;)
        {
            switch(State)
            {
    
                case STATE_ON:
                    /*--------------------------------------------------------------------------
                        Flash API 예제 시작
                    ---------------------------------------------------------------------------*/
                    State = STATE_FLASH_ERASE;
                    break;
    
                case STATE_FLASH_ERASE:
                    /*--------------------------------------------------------------------------
                        섹터 H 영역 ERASE
                    ---------------------------------------------------------------------------*/
                    asm("    ESTOP0");
                    MyCallbackCounter = 0;
    
                    Status = Flash_Erase((SECTORH),&FlashStatus);
                    if(Status != STATUS_SUCCESS) 
                    {
                        Example_Error(Status);
                    }
    
                    State = STATE_FLASH_PROGRAM;
                    break; 
                
                case STATE_FLASH_PROGRAM:
                    /*--------------------------------------------------------------------------
                        Flash Sector H 영역(Start Address : 0x300000, Length : 0x200)에
                        ADC_Buffer(Start Address : &ADC_buffer, Length : 0x200)의 데이터들을 기록
                    ---------------------------------------------------------------------------*/
                    asm("    ESTOP0");
                    MyCallbackCounter = 0;
    
                    Status = Flash_Program((Uint16 *)0x300000,(Uint16 *)ADC_buffer,0x200,&FlashStatus);
                    if(Status != STATUS_SUCCESS) 
                    {
                        Example_Error(Status);
                    }
    
                    State = STATE_FLASH_VERIFY;
                    break; 
    
                case STATE_FLASH_VERIFY:
                    /*--------------------------------------------------------------------------
                        Flash Sector H 영역(Start Address : 0x300000, Length:0x200)에
                        ADC_buffer 영역(Start Address : &ADC_buffer, Length:0x200)의
                        데이터들이 올바르게 기록되었는지 확인
                    ---------------------------------------------------------------------------*/
                    asm("    ESTOP0");
                    MyCallbackCounter = 0;
    
                    Status = Flash_Verify((Uint16 *)0x300000,(Uint16 *)ADC_buffer,0x200,&FlashStatus);
                    if(Status != STATUS_SUCCESS) 
                    {
                        Example_Error(Status);
                    }
                    State = STATE_OFF;            
                    break;
    
                case STATE_OFF:
                    /*--------------------------------------------------------------------------
                        Flash API 예제 끝 
                    ---------------------------------------------------------------------------*/
                    Example_Done();
                    break;
            }
        }
    }
    /*============================================================================================
        메인 함수 - 끝
    ============================================================================================*/
    
    
    /*============================================================================================
        함수 정의
    ============================================================================================*/
    void MyCallbackFunction(void)    /* Callback function - must be executed from outside flash/OTP */
    {   
        if(LEDcnt == 10000)
        {
            GpioDataRegs.GPATOGGLE.all = 0x0000003F;
            LEDcnt = 0;
        }
        else
        {
            LEDcnt++;
        }
        
        MyCallbackCounter++;
    }
    
    /*--------------------------------------------------------------------------
        예제 실행 중, 오류가 발생되면 여기서 프로그램이 멈춤
    ---------------------------------------------------------------------------*/
    void Example_Error(Uint16 Status)
    {
        /* Error code will be in the AL register */ 
        asm("    ESTOP0");
        asm("    SB 0, UNC");
    }
    
    /*--------------------------------------------------------------------------
        예제가 이상 없이 종료되면, 여기서 프로그램이 멈춤
    ---------------------------------------------------------------------------*/
    void Example_Done(void)
    {
        asm("    ESTOP0");
        asm("    SB 0, UNC");
    }       
    
    
    /*============================================================================================
        끝 - 예제 코드 종료
    ============================================================================================*/

     

     

    💡 125 Line 옵션 풀이

     

    datasheet 159page

     

    0x00 8000 L0 SARAM 영역의 임의의값들을 0x30 0000 FLASH 영역에 Flash_Program()함수를 통해 값을 기록한다.

     

    datasheet 162page

     

    옵션 주석내용 중 Flash Sector H에 대한 주소는 위의 그림을 참고한다.

     

     

    FLASH API 예제 실행 및 결과 확인

    • CCS 화면 Project Explorer 창에 LAB7 프로젝트를 IMPORT 한다.
    • 프로젝트를 Build 한다.
      • CCS 상단 메뉴 Project > Build Project를 선택하거나 Build 아이콘을 클릭하여 예제 프로젝트를 Build 한다.
    • 프로세서를 Reset 한다.
      • 타겟과 CCS가 연결된 상태에서 CCS 상단메뉴 Run > Reset > Reset CPU를 선택한다.
    • Build 과정으로 생성된 결과파일(*.out)을 프로세서에 Load 한다.
      • CCS 화면 구성을 CCS Debug Perspective로 전환하고, 타겟과 CCS가 연결된 상태에서 CCS 상단메뉴 Run > Load > Load Program을 선택하거나, Load Program 아이콘을 클릭하여, 결과 파일(LAB7.out)을 프로세서에 Load 한다.
    • 예제 프로그램과 위에서 서술한 Flash API Checklist를 비교하면서, Step 별로 예제에 잘 반영되었는지 확인해본다.

     

    📌 API를 사용하기 전 체크사항

    • Step 1. 사용자 프로젝트에 Flash API Libray 추가
    • Step 2. 프로그램 소스에 Flash2833x_API_Library.h 파일 include
    • Step 3. Flash2833x_API_Config.h 파일 수정

     

    📌 사용자 어플리케이션에서 Flash API 함수를 사용하기 전 체크사항
    • Step 4. PLL Control Register (PLLCR) 초기화
    • Step 5. Flash API 함수들을 Internal RAM으로 복사
    • Step 6. Flash_CPUScaleFactor 초기화
    • Step 7. Callback Function Pointer 초기화
    • Step 8. Disable Global Interrupts
    • Step 9. Code Security Module(CSM)을 확인한다.
    • Step 10. (Optional) Frequency Toggle Test를 한다.
    • Step 11. API의 함수 사용에 관한 룰(Rule)을 지킨다.

     

    • 예제 프로젝트를 실행한다.

    CCS 상단메뉴 Run > Resume을 선택하거나 Resume 아이콘을 클릭하여, 프로세서에 Load된 예제 프로그램을 실행한다. 그리고 프로그램이 아래 그림과 같은 코드에서 멈추는 것을 확인한다.

     

     

    Sector H를 삭제(Erase)하기 전에 멈춘 프로그램

     

    •  ADC_buffer 영역에 어떤 값이 저장되어 있는지 확인한다. Memory Browser 창에서 아래 그림과 같이 &ADC_buffer 를 입력하고, 현재 저장된 데이터를 확인한다.

     

    ADC_buffer 영역에 현재 저장된 값 확인

     

    • ADC_buffer 영역에 외부로부터 데이터를 가져온다. Memory Browser 창에서 아래그림과 같이 Load Memory 메뉴를 선택한다.

     

    Memory Browser의 Load Memory 메뉴 실행

     

    Load Memory 창이 나타나면 임의의 ADC.dat 파일 경로를 지정하고 아래와 같이 설정한다.

     

     

     

    위 과정이 완료되었으면 Memory Browser 창을 통해, 설정했던 경로에 위치한 파일로부터 데이터가 Load 되었는지 확인한다. (ADC_buffer_data.dat => ADC_buffer)

     

     

     

    • Flash Sector H 영역에 어떤 값이 저장되어 있는지 확인한다. Memory Browser 창에서 아래 그림과 같이 Sector H의 시작주소인 0x300000 번지를 입력하고, 현재 저장된 데이터를 확인한다.

     

    Flash Memory Sector H 영역에 현재 저장되어 있는 값 확인

     

    • 다시 프로그램을 실행(Resume) 시킨 후, Flash Sector H 영역이 Erase 되었는지 확인한다. CCS 상단메뉴 Run > Resume을 선택하거나 Resume 아이콘을 클릭하여, 예제 프로그램을 실행한다. 프로그램이 아래그림과 같은 코드에서 멈추는 것을 확인하고 Flash Sector H 영역이 Erase 되었는지 확인한다.

     

    Sector H 영역을 Program 하기 전, 멈춘 프로그램

     

    Erase 된 Flash Sector H 영역

     

    • 다시 프로그램을 실행(Resume) 시킨 후, Flash Sector H 영역이 Program 되었는지 확인한다. CCS 상단메뉴 Run > Resume을 선택하거나 Resume 아이콘을 클릭하여, 예제 프로그램을 실행한다. 프로그램이 아래 그림과 같은 코드에서 멈추는 것을 확인하고, Flash Sector H 영역에 ADC_buffer 데이터가 Program 되었는지 확인한다.

     

    Flash Sector H 영역을 Verify 하기 전, 멈춘 프로그램

     

    ADC_buffer 데이터가 Program 된 Flash Sector H 영역

     

    • 다시 프로그램을 실행(Resume) 시켜서, Verify 과정을 마친 후, Flash Sector H 영역에 올바르게 데이터가 저장되었는지 확인한다. CCS 상단메뉴 Run > Resume을 선택하거나 Resume 아이콘을 클릭하여, 예제 프로그램을 실행한다. 프로그램이 Example_Don( ) 함수에서 멈추면, Flash Sector H 영역에 올바르게 데이터가 저장된 것이고, 만약 Example_Error( ) 함수에서 멈춘다면, 데이터가 올바르게 기록되지 못한 것 이다.

     

     

    이상 없이 종료된 예제 프로그램

     

    • Flash Sector H 영역에 저장된 데이터를 그래프로 관찰한다. CCS 상단메뉴 Tools > Graph > Single Time을 선택한다. Graph Properties 창이 나타나면, 아래 그림과 같이 설정한다.

     

    Graph Properties 설정

     

    설정이 완료되면 "OK" 버튼을 클릭하고, 그래프 창을 통해 Flash Sector H 영역에 저장된 데이터를 관찰한다.

     

    그래프로 데이터 관찰

     

     

     

    728x90
    반응형
상단으로