QSPI나 SQI는 모두 같은 것을 의미합니다. 


SPI는 CE, SCK, SDI, SDO로 총 4개 핀으로 통신하지만 QSPI나 SQI는 CE, SCK, SIO0, SIO1, SIO2, SIO3로 6개 핀으로 통신이 이루어집니다. 


병렬로 데이터가 이동하기 때문에 SPI보다 빠른 통신속도를 요구할 때 사용합니다. 


통상 MCU와 QSPI로 연결할 때 아래와 같은 방법으로 연결하며 #1 CE 핀에 연결된 Pull-up 저항 4.7kohm은 MCU가 Start-up 하는 경우 #1 CE 핀에 High가 인가될 수 있도록 하는 역할을 합니다. 




QSPI 연결방법 예제


일반 SPI 연결방법 예제



Serial Flash memory 

  • 파트명: SST26F016B

  • 데이터시트: http://ww1.microchip.com/downloads/en/DeviceDoc/20005262D.pdf



QSPI or SQI 통신 지원 MCU

  • 파트명: ATSAMV71N21

  • 데이터시트: 
    http://ww1.microchip.com/downloads/en/DeviceDoc/SAM-E70S70V70V71-Family%20DataSheet-DS60001527B.pdf




Posted by KennyShin
,







AEC Q-100의 Grade는 동작온도 범위입니다. 


Grade는 0~4로 총 5단계로 나누고 있습니다. 


Grade 0의 동작온도는 최저 -40도, 최고 +150도입니다. 단위는 섭씨입니다. 




  • Grade 0: -40°C to +150°C 주변 동작 온도 범위 
  • Grade 1: -40°C to +125°C 주변 동작 온도 범위
  • Grade 2: -40°C to +105°C 주변 동작 온도 범위 
  • Grade 3: -40°C to +  85°C 주변 동작 온도 범위 
  • Grade 4:    0°C to +  70°C 주변 동작 온도 범위



2019/01/06 - [Embedded] - 린(LIN) 통신의 특징들 알아보기

2019/01/06 - [Embedded] - CAN 통신(캔 통신) 소개하기

Posted by KennyShin
,

코드를 만들면서 테스트를 할 때 주석 처리를 해야 할 경우가 있습니다. 매번 코드 앞에 '//'과 같은 코드를 삽입하려면 시간을 많이 빼앗기게 됩니다. 또 몇 줄 되지 않는 코드는 주석 처리하는데 어렵지 않지만 여러 줄을 한꺼번에 주석 처리해야 하는 경우는 번거로울 수 있습니다.


//abc();


MPLAB X IDE에서는 여러 줄을 한꺼번에 주석 처리할 수 있는 방법을 제공합니다. 어떻게 주석 처리를 할 수 있는지 알아보겠습니다.

먼저 주석 처리를 위한 단축키는 Ctrl + 키'/'입니다. 컨트롤키를 누르고 '/'를 누르면 마우스 커서가 위치한 줄의 코드가 주석 처리됩니다.


주석 처리 전


32번째 줄을 Ctrl + 키'/'를 눌러 주석 처리 한 결과



이제 한꺼번에 여러 줄을 주석 처리해 보겠습니다.

여러줄을 드레그 합니다.


위와 같이 마우스로 주석 처리하고자 하는 라인을 드래그하여 여러 줄을 선택합니다.

그리고 Ctrl + 키'/'를 누르면 아래와 같이 주석 처리가 됩니다.


Ctrl + 키'/'를 눌러 주석 처리를 한 모습


주석 처리를 다시 해제하려면 주석 처리된 부분을 다시 선택한 상태에서 

Ctrl + 키'/'를 눌러줍니다.


Ctrl + 키'/'를 다시 눌러 주석 처리을 해제한 모습



Ctrl + 키'/'가 아니어도 아이콘을 눌러 주석 처리할 수도 있습니다.

아래 그림의 왼쪽 위 빨간색 원안에 표시된 아이콘을 누르면 주석 처리할 수 있고, 파란색 아이콘을 누르면 주석을 다시 해제할 수 있습니다.

아이콘으로 주석을 처리하고 해제하는 방법







Posted by KennyShin
,


MCU와 CAN Tranceiver사이의 통신 전압 레벨


 MCU와 CAN Tranceiver(예: ATA6562/63) 사이는 MCU의 디지털 동작 레벨과 동일합니다. 예를 들어 MCU가 3.3V를 사용한다면 MCU와 CAN Tranceiver 사이의 통신 전압 레벨은 3.3V이고 MCU가 5V를 사용한다면 MCU와 CAN Tranceiver 사이의 통신 전압 레벨은 5V가 됩니다. ATA6562와 ATA6563은 5V로 동작하지만 MCU와의 디지털 인터페이스는 3V에서 5V까지 모두 사용할 수 있습니다.



CAN Tranceiver에서 Network으로 출력하는 통신 전압 레벨은?



 CAN Tranceiver에서 네트워크 라인으로 출력되는 데이터는 Differential voltage 전압 레벨로 통신을 하게 되는데요. 두 라인의 전압이 같을 때는 '1', 두 라인의 전압이 다를 때는 '0'입니다. 그러면 두 라인의 전압이 다를 때의 전압 차이는 몇 볼트일까요?



정답은 2.0V입니다.



마지막 한 가지! '0'은 Dominant라고 하고 '1'은 Recessive라고 합니다. 사전적인 의미로는 Dominant('0')가 "우성"이라는 의미를 가지고 있고 Recessive('1')은 "열성"이라는 의미를 가지고 있다고 하니 참조하세요.



Posted by KennyShin
,


CAN 통신의 메시지는 Transmit Message ID 와 Receive Message ID 두 가지로 구분할 수 있습니다.


Transmit Message ID란?


CAN 메시지 ID는 메시지를 보내거나 받는 것을 구분하기 위해서 사용할 뿐만 아니라 메시지의 우선순위를 나타내기도 합니다.. 여러 개의 노드에서 동시에 메시지를 전송할 경우 메시지가 깨지지 않고 ID가 높은 것이 전송될 수 있도록 합니다. 예를 들어 ID가 15인 메시지보다 ID가 10인 메시지가 더 높은 우선순위를 가집니다. 따라서 다른 메시지보다 더 높은 우선순위로 메시지를 보내기 위해서는 낮은 ID로 메시지를 구성해야만 합니다. 또한 메시지 ID는 하나의 CAN 버스에서 단 하나만 존재합니다. 다시 말하면 하나의 CAN 버스에 연결된 노드는 다른 노드와 같은 ID를 가지고 메시지를 전송할 수 없습니다. Transmit Message는 데이터의 종류와 그 데이터의 우선순위에 따라 구성됩니다.


Receive Message ID란?


CAN Message를 수신하는데 사용합니다. CAN 버스에 수 메시지를 모두 MCU에서 소프트웨어적으로 확인할 수 없기 때문에 CAN을 담당하는 Peripheral에 특정 ID만 메시지를 수신할 수 있도록 구성할 수 있습니다. ID는 총 두 가지로 구성할 수 있습니다. 첫 번째는 Standard Identifier이고 두 번째는 Extended identifier입니다. Standard  Identifier(는 11비트로 ID가 구성되며, Extended Identifier는 29비트로 ID가 구성됩니다. Standard Identifier는 CAN 2.0A(최대 통신 속도 256kbit/sec), Extended Identifier(1Mbit/sec)는 CAN 2.0B에서 규정하고 있습니다. 


메시지를 받기 위한 필터를 구성하는 방법으로 아래와 같은 방법으로 나누어 집니다.

- ID의 범위를 지정하는 방법(예: 200부터 210번까지의 메시지 ID를 받음)

- 한 개 또는 두 개 ID만 받는 방법(특정 ID만 받는 방법)

- 기존의 Classic bit mask filter를 사용하는 방법


Posted by KennyShin
,

CAN 통신은 메시지(Message) 기반의 프로토콜로 디자인되었습니다. 오토모티브(자동차) 애플리케이션에서 주로 사용되며, 우주 항공분야, 선박, 열차, 산업 자동화, 그리고 의료 장비까지 널리 사용됩니다.


CAN 2.0은 최종 버전은 CAN 2.0A와 CAN 2.0B 두 가지로 나타낼 수 있습니다.


CAN 2.0A

- Standard format with an 11-bit identifier

- 최대 통신속도: 256kbit/sec


CAN 2.0B

- Extended format with a 29-bit identifier

- 최대 통신속도: 1Mbit/sec


CAN은 멀티 마스터(multi-master) 직렬 버스 구조로 ECUs(Electronic Control Units)라고 부르는 노드에 연결을 할 때 사용합니다. 이러한 ECU들을 노드라고 부릅니다. 모든 노드는 CAN에서 사용하는 두 개의 선으로 구성된 버스에 서로 연결됩니다. 이때 주로 MCU가 CAN 노드가 되며, 외부에 CAN Tranceiver가 반드시 필요합니다. 버스의 양 끝에는 반드시 120ohm 종단 저항이 연결되어 있어야 합니다.


사진출처: http://ww1.microchip.com/downloads/en/AppNotes/Atmel-42464-SAMC21-CAN-BUS-Firmware_ApplicationNote_AT6493.pdf


CAN 통신에 사용되는 여러 반도체 제조사에서 공급되고 있으며 Atmel(현재의 Microchip)의 ATA6560이나 ATA6561과 같은 CAN 트렌시버를 사용할 수 있습니다.


Posted by KennyShin
,

Do you need to change the XC8 or XC16 or XC32 compiler optimization level? You can choose it on below window.




There are two kinds of method to select Project Properties.


1. MPLAB X --> Project name --> "Right click on project name" --> Properties

2. MPLAB X --> Dashboard --> Properties



Please refer to the optimization level option as below.


- 0 - Do not optimize. The compiler’s goal is to reduce the cost of compilation and to make debugging produce the expected results.
- 1 - Optimize. Optimizing compilation takes somewhat longer, and a lot more host memory for a large function. The compiler tries to reduce code size and execution time.
- 2 - Optimize even more. The compiler performs nearly all supported optimizations that do not involve a space-speed trade-off.
- 3 - Optimize yet more favoring speed (superset of O2).

- s - Optimize yet more favoring size (superset of O2). 


Posted by KennyShin
,

"How much would the output file change if we compiled C code using the XC8 compiler?"


So I tried to compile C code that I made and compared the each output HEX file depend on each optimization level.


pic16_optimizationText.X.zip



I will use below C code, It will be friendly if you learned C language


 /* TODO <INSERT USER APPLICATION CODE HERE> */

        for(i=2;i<=9;i++){

            for(j=2;j<=9;j++){

                LATA = i*j;

            }

        }



Now let's see the result! XC8 Compiler has three kinds of optimization level such as Free, Standard, and Professional mode


  • XC8 Compiler version: v1.45



 

 Free mode

Standard mode 

Professional mode 

 Flash memory used

 80 bytes

 69 bytes

 50 bytes

 rate

1

0.86

0.65



  • Free mode

Memory Summary:

    Program space        used    50h (    80) of  2000h words   (  1.0%)

    Data space           used     Ah (    10) of   3F0h bytes   (  1.0%)

    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)

    Data stack space     used     0h (     0) of   3F0h bytes   (  0.0%)

    Configuration bits   used     0h (     0) of     4h words   (  0.0%)

    ID Location space    used     0h (     0) of     4h bytes   (  0.0%) 


  • Standard mode

Memory Summary:

    Program space        used    45h (    69) of  2000h words   (  0.8%)

    Data space           used     Ah (    10) of   3F0h bytes   (  1.0%)

    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)

    Data stack space     used     0h (     0) of   3F0h bytes   (  0.0%)

    Configuration bits   used     0h (     0) of     4h words   (  0.0%)

    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)


  • Professional mode

Memory Summary:

    Program space        used    32h (    50) of  2000h words   (  0.6%)

    Data space           used     7h (     7) of   3F0h bytes   (  0.7%)

    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)

    Data stack space     used     0h (     0) of   3F0h bytes   (  0.0%)

    Configuration bits   used     0h (     0) of     4h words   (  0.0%)

    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)



As we see the result of compiler depend on the optimization level, In case of Standard mode, The size of hex file can be reduced to 0.85 ratio. In case of Professional mode, The size of hex file can be reduced to 0.65 ratio. 


As you may expect, As the size of an Hex file decreases, it will execute much more faster and save the flash memory which stores the hex file.


I think that Free mode also can use for embedded programming but if you use the standard version or professional version, you can save the flash memory and execute code much more faster.



Posted by KennyShin
,