:::: MENU ::::

I2C 프로토콜의 NACK

I2C 프로토콜은 필립스반도체(지금의 NXP)에서 만든 프로토콜로 I2C의 약자는 Inter-Integrated-Circuit 이다. SDA, SCL 2 wire 만 필요해서 간단한데, SPI와 마찬가지로 마스터-슬레이브 구조를 가진다. 데이터를 전송하고 ACK가 오면 통신에 이상이 없는 것이지만 NACK의 상황도 있다.

하기 표와 같이 NACK의 상황중 가장 많은 경우가 Slave Address가 틀릴 경우일 것 같은데, 데이터 시트에서 명기한 주소가 7 bit address인지 아지면 8 bit인지 확인이 필요하고, 칩 벤더에서 제공하는 드라이버 코드가 8bit를 받아서처리하는 것인지, 7bit를 받아서 처리하는 루틴인지 확인이 필요하다. 참고 문서




SES(Segger Embedded Studio)에서 NRF_LOG_INFO 문제

SES환경에서 NRF_LOG_INFO(“Blinky example started!!!”)와 같은 같은 디버그 문구가 Debug Terminal에 보이지 않는 이슈 해결 방법

sdk_config.h 파일에서 다음과 같이 기존에 1로 설정되어 있던 값을 0 으로 수정한다.

#define NRF_LOG_DEFERRED 0
#define NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED 0

#define NRF_LOG_BACKEND_RTT_ENABLED 1
#define NRF_LOG_ENABLED 1
이 설정도 되어 있어야 함.

그런데 다음 설정은 0으로 되야 함
#define NRF_LOG_BACKEND_UART_ENABLED 0

그리고 보드가 바뀌면 아래 핀 설정도 같이 해야 함.
#define NRF_LOG_BACKEND_UART_TX_PIN 6


Poly Switch 사용법 – 스펙 결정

PolySwitch

회로에 과전류가 유입되면 열에 의하여 폴리스위치의 저항값이 커진다. 이에 따라 과전류를 제한하여 기기의 내부회로를 보호하게 된다. 반대로 소자의 온도가 낮아지게되면 저항값은 다시 초기상태로 돌아와 회로가 정상동작 하게 된다.

용어

  • Ih ( Hold Current ) : 최대 사용가능 전류
    주위온도 20℃에서 이 전류값까지는 절대 동작(전류차단)하지 않으며, 정상적으로 동작하는 전류의 최대값을 말함.
  • It ( Trip Current ) : 최소 동작가능 전류
    주위온도 20℃에서 이 전류값부터는 절대적으로 동작(전류차단)하며, 과전류로 판단할 수 있는 최소전류값을 말함

즉 Ih 부터 It사이에서 동작을 하는데, 얼마나 빠르게 퓨즈가 동작하는지 여부는 Time-to-Trip Graph를 참조해야 한다.

  • Vmax ( Maximum Device Voltage ) : 최대 사용가능 전압
    이 전압값은 각 Part의 내전압을 의미하며 이 전압값이내에서는 각 Part의 사용이 가능
  • Imax ( Maximum Device Current ) : 최대 허용 전류
    이 전류값은 각 Part의 내전류를 의미하며 이 전류값이내에서는 각 Part의 사용이 가능
  • Rmax ( Maximum Device Resistance ) : 최대 초기 저항치.
  • Rmin ( Minimum Device Resistance ) : 최소 초기 저항치.
  • R1max ( Minimum Device Resistance measured 1 hour post trip ) : Solder or 첫 Tirp후 1시간 이후의 최대 저항치

Bluetooth 보안 문제 – SweynTooth

블루투스 소프트웨어 스텍에서 발견된 문제들. 다수의 칩 벤더들의 SDK에 문제(deadlocks, crashes and buffer overflows or completely bypass security)가 있어서 패치가 제공되었다.

Table 1: Vulnerabilities type and affected vendors




Type
Vulnerability Name
Affected Vendors
CVE




Crash
Link Layer Length Overflow
Cypress
CVE-2019-16336 (6.1)
NXP
CVE-2019-17519 (6.1)



Truncated L2CAP Dialog Semiconductors CVE-2019-17517 (6.3)



Silent Length Overflow Dialog Semiconductors CVE-2019-17518 (6.4)



Public Key Crash Texas Instruments CVE-2019-17520 (6.6)



Invalid L2CAP Fragment Microchip CVE-2019-19195 (6.8)



Key Size Overflow Telink Semiconductor CVE-2019-19196 (6.9)




Deadlock
LLID Deadlock
Cypress
CVE-2019-17061 (6.2)
NXP
CVE-2019-17060 (6.2)



Sequential ATT Deadlock STMicroelectronics CVE-2019-19192 (6.7)



Invalid Connection Request Texas Instruments CVE-2019-19193 (6.5)




Security Bypass Zero LTK Installation Telink Semiconductor CVE-2019-19194 (6.10)



Table 2: Vulnerabilities and SDK versions of the affected SoCs.* indicates extra affected SoCs reported by the vendor not tracked by our team.





Vuln.
SoC Vendor
SoC Model
SDK Ver.
Qualification ID(s)





BLE Version 5.0/5.1
6.1,6.2 Cypress (PSoC 6) CYBLE-416045 2.10 99158
6.5,6.6 Texas Instruments CC2640R2 3.30.00.20 94079
6.9,6.10 Telink TLSR8258 3.4.0 92269, 136037
6.7 STMicroelectronics WB55 1.3.0 111668
6.7 STMicroelectroncis BlueNRG-2 3.1.0 87428, 106700, 94075
6.4 Dialog DA1469X* 10.0.6 100899
6.3 Dialog DA14585/6* 6.0.12.1020 91436





BLE Version 4.2
6.1,6.2 Cypress (PSoC 4) CYBL11573 3.60 62243, 136808, 79697, 82951, 79480
6.1,6.2 NXP KW41Z 2.2.1 84040
6.4 Dialog DA14680 1.0.14.X 87407, 84084, 71309, 75255





BLE Version 4.1
6.5 Texas Instruments CC2540 1.5.0 23454, 127418
6.3 Dialog DA14580 5.0.4 83573
6.8 Microchip ATSAMB11 6.2 73346





2.1 Attacks on IoT

Table 3: Products verified to be vulnerable





Product
Category
BLE SoC
Vulnerability
Impact





Eve Energy Smart Home
DA14680
(6.4) Silent Length Overflow
Crash
August Smart Lock Smart Home
DA14680
(6.4) Silent Length Overflow
Crash





Fitbit Inspire
Wearables
CY8C68237
(6.1) LL Length Overflow
Crash
(6.2) LLID Deadlock
Crash





CubiTag Gadget Tracking CC2640R2
(6.6) Public Key Crash
Deadlock





eGeeTouch TSA Lock Security CC2540
(6.5) Invalid Connection Request
Deadlock





문제가 있는 제품들

출처: https://asset-group.github.io/disclosures/sweyntooth/


전력소모를 줄이는 법 – Low Power System

배터리를 사용하는 제품은 필수적으로 전력소모를 줄여야 한다. 시스템에서 전력소모를 줄이기 위한 방법은 다음과 같다.

  • MCU의 동작 전압을 낮추고, 동작 Clock를 낮출 것
  • 리니어 레귤레이터 대신 스위칭 레귤레이터를 사용할 것
  • MCU내의 사용하지 않는 peripheral을 disable할 것: Timer, BOD, Watch Dog Timer, UART, ADC 등 특히 ADC나 UART
  • 전류를 센싱하는 저항이 있다면 이 저항의 크기를 높일 것
  • 코드에서 최대한 Sleep 모드를 사용할 것

참고로 Attiny45의 경우 어떤 응용에서 동작시 1.6mA정도까지 줄여봤다. 그리고 이런 문서도 참고하면 좋을 듯.


코인셀 배터리 사용시 시스템 설계

코인셀 배터리의 경우 용량도 중요하지만 한번에 땡겨서 쓸 수 있는 전류도 중요하다. 하지만 이 값은 일반적으로 충분히 크지 않다.

따라서 코인셀 배터리의 용량만큼 잘 쓰려면

  • 코인셀에 병렬로 cap을 달아라. 47~100uF, 슈퍼캡?
  • 전류소모가 낮은 부품으로 구성 (당연한 얘기)
  • FEP(Functional End Point) 마진 확보 : 즉 구동 전압이 낮은 칩 사용
  • 테스트 결과를 보면 전류를 갑자기 땡기는 구간이 짧아야하고, 휴지기간이 길어야 한다.
  • 시스템을 설계할때 동시에 구동되는 부품을 줄이도록 설계: 즉 RF칩이 TX를 할때 모터를 구동하지 않는 다거나… (LCD, 모터, RF칩, LED) <= 이게 중요할 듯

참고문헌


ATTiny85 아두이노

ATTiny85는 8핀짜리 칩이나 아두이노 환경에서 개발가능하다.

  • Digispark-Compatible ATtiny85 USB 같이 부트로더가 있는 보드를 사용하거나
  • ATMEL ICE 같은 장비를 사용하고 아두이노 IDE에서 다운로드가 가능하다.

Digispark-Compatible ATtiny85 USB

주의할 점

Fuse 비트를 수정하면 Reset 핀도 사용이 가능하지만 일반적으로 안쓰는 것이 좋다. 나머지 사용이 가능한 핀은 다음과 같고, 시리얼 출력은 Software Serial이 사용이 가능하다. 단 프로그래밍을 할때 8Mhz로 해야 한다. Tools –> Board –> ATtiny85 (internal 8 MHz clock)

ATmega85 Pin Reference

사용이 가능한 함수들:

Getting Extra Pins on ATtiny

핀수가 적어서 이를 유용하게 사용하기 위한 팁 – http://www.technoblogy.com/show?LSE

참고



Hex 파일 합치기

Bootloader 및 Application 펌웨어가 있는 경우 양산시 하나의 파일을 합쳐서 프로그래밍을 하면 1단계가 줄어든다.

Hex 파일 합치기

srec_cat.exe 이라는 윈도우즈 프로그램을 사용하여 다음과 같이 하나의 파일로 합친다.

srec_cat.exe HexFile1.hex -Intel HexFile2.hex -Intel -o MergedHexFile.hex -Intel

인텔 Hex 파일포맷

Record Format

:llaaaatt[dd...]cc
  • : is the colon that starts every Intel HEX record.
  • ll is the record-length field that represents the number of data bytes (dd) in the record.
  • aaaa is the address field that represents the starting address for subsequent data in the record.
  • tt is the field that represents the HEX record type, which may be one of the following:
    00 – data record
    01 – end-of-file record
    02 – extended segment address record
    04 – extended linear address record
    05 – start linear address record (MDK-ARM only)
  • dd is a data field that represents one byte of data. A record may have multiple data bytes. The number of data bytes in the record must match the number specified by the ll field.
  • cc is the checksum field that represents the checksum of the record. The checksum is calculated by summing the values of all hexadecimal digit pairs in the record modulo 256 and taking the two’s complement.

Data Records

:10246200464C5549442050524F46494C4500464C33

This record is decoded as follows:

:10246200464C5549442050524F46494C4500464C33
|||||||||||                              CC->Checksum
|||||||||DD->Data
|||||||TT->Record Type
|||AAAA->Address
|LL->Record Length
:->Colon
  • 10 is the number of data bytes in the record.
  • 2462 is the address where the data are to be located in memory.
  • 00 is the record type 00 (a data record).
  • 464C…464C is the data.
  • 33 is the checksum of the record.

Extended Linear Address Records (HEX386)

Extended linear address records are also known as 32-bit address records and HEX386 records. These records contain the upper 16 bits (bits 16-31) of the data address. The extended linear address record always has two data bytes and appears as follows:

:02000004FFFFFC
  • 02 is the number of data bytes in the record.
  • 0000 is the address field. For the extended linear address record, this field is always 0000.
  • 04 is the record type 04 (an extended linear address record).
  • FFFF is the upper 16 bits of the address.
  • FC is the checksum of the record and is calculated as
    01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).

When an extended linear address record is read, the extended linear address stored in the data field is saved and is applied to subsequent records read from the Intel HEX file. The linear address remains effective until changed by another extended address record.

The absolute-memory address of a data record is obtained by adding the address field in the record to the shifted address data from the extended linear address record. The following example illustrates this process..

Address from the data record's address field      2462
Extended linear address record data field     FFFF
                                              --------
Absolute-memory address                       FFFF2462

Extended Segment Address Records (HEX86)

Extended segment address records-also known as HEX86 records-contain bits 4-19 of the data address segment. The extended segment address record always has two data bytes and appears as follows:

:020000021200EA
  • 02 is the number of data bytes in the record.
  • 0000 is the address field. For the extended segment address record, this field is always 0000.
  • 02 is the record type 02 (an extended segment address record).
  • 1200 is the segment of the address.
  • EA is the checksum of the record and is calculated as
    01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).

When an extended segment address record is read, the extended segment address stored in the data field is saved and is applied to subsequent records read from the Intel HEX file. The segment address remains effective until changed by another extended address record.

The absolute-memory address of a data record is obtained by adding the address field in the record to the shifted-address data from the extended segment address record. The following example illustrates this process.

Address from the data record's address field     2462
Extended segment address record data field      1200
                                             --------
Absolute memory address                      00014462

Start Linear Address Records (MDK-ARM only)

Start linear address records specify the start address of the application. These records contain the full linear 32 bit address. The start linear address record always has four data bytes and appears as follows:

:04000005000000CD2A
  • 04 is the number of data bytes in the record.
  • 0000 is the address field. For the start linear address record, this field is always 0000.
  • 05 is the record type 05 (a start linear address record).
  • 000000CD is the 4 byte linear start address of the application.
  • 2A is the checksum of the record and is calculated as
    01h + NOT(04h + 00h + 00h + 05h + 00h + 00h + 00h + CDh).

The Start Linear Address specifies the address of the __main (pre-main) function but not the address of the startup code which usually calls __main after calling SystemInit(). An odd linear start address specifies that __main is compiled for the Thumb instruction set.

The Start Linear Address Record can appear anywhere in hex file. In most cases this record can be ignored because it does not contain information which is needed to program flash memory.

End-of-File (EOF) Records

:00000001FF
  • 00 is the number of data bytes in the record.
  • 0000 is the address where the data are to be located in memory. The address in end-of-file records is meaningless and is ignored. An address of 0000h is typical.
  • 01 is the record type 01 (an end-of-file record).
  • FF is the checksum of the record and is calculated as
    01h + NOT(00h + 00h + 00h + 01h).

Example Intel HEX File

Following is an example of a complete Intel HEX file:

:10001300AC12AD13AE10AF1112002F8E0E8F0F2244
:10000300E50B250DF509E50A350CF5081200132259
:03000000020023D8
:0C002300787FE4F6D8FD7581130200031D
:10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016
:04003F00A42EFE22CB
:00000001FF

참고

 


Pages:1234567...56