본문 바로가기
반응형

전자/임베디드 시스템164

라즈베리 파이 3B와 3B+ 차이 라즈베리 파이 3B+은 3B에서 업그레이드된 버전이다. 라즈베리 파이 3B와 3B+의 차이는 다음과 같다. 라즈베리 파이 3B 라즈베리 파이 3B+ CPU BCM2837 1.2GHz BCM2837 1.4GHz 이더넷 10/100M 1G 와이파이 802.11 b/g/n Dual-band 802.11 ac 블루투스 4.0 4.2 POE No Yes 소비전력 1.3 ~ 3.7W 2.3 ~ 5.4W 출시일 2016 2018 라즈베리 파이 3B의 와이파이/블루투스 칩은 보드 아랫면에 있다. 칩 안테나를 사용하고 보드 윗면 왼쪽 위 홀 옆에 있다. 라즈베리 파이 3B+의 와이파이/블루투스 칩은 보드 윗면 왼쪽 위에 쉴드 되어 있다. PCB 안테나를 사용한다. 2021. 9. 10.
라즈베리 파이 UART 라즈베리 파이 3에는 2개의 UART가 내장되어 있다. PL011 UART mini UART PL011는 ARM 기반의 UART이고 mini UART보다 성능이 좋다. mini UART는 GPU 코어 클럭을 사용하기 때문에 GPU 클럭이 바뀌면 UART 통신 속도도 바뀐다. UART는 GPIO14(TX)와 GPIO15(RX)를 사용하고 PL011 UART 또는 mini UART를 선택하여 출력할 수 있다. 디폴트는 mini UART가 GPIO14와 15에 연결되어 있고 PL011 UART는 블루투스 모듈에 연결되어 있다. GPIO14와 15는 serial0이고 블루투스 모듈에 연결된 것은 serial1이다. mini UART는 ttyS0이고 PL011 UART는 ttyAMA0이다. "ls -l /dev".. 2021. 9. 9.
STM32 플래시 쓰기 속도 STM32L100 STM32L100의 플래시 쓰기 또는 지우기 시간은 다음과 같이 3.28ms이다. 바이트, 워드, 더블 워드, 하프 페이지 모두 바이트 크기에 상관없이 쓰기/지우기 시간은 동일하다. half-page는 128바이트이고 1초에 최대 약 38kByte를 쓰고 지울 수 있다. STM32F767 STM32F767의 쓰기 시간은 16us이다. 쓰기 크기는 워드이다. 1초에 최대 61kByte를 쓸수 있다. 2021. 8. 12.
1200억짜리 화상 탐사선을 날려버린 버그 1998년 NASA에서 화성 대기와 표면을 조사하기 위해 화성 탐사선 Mars Climate Orbiter을 발사하였다. 하지만, 1999년 화성 궤도에 제대로 진입하지 못하고 통신이 두절되었다. 탐사선은 록히드 마틴이 만들고 운영은 NASA에서 했는데 록히드 마틴에서 만든 소프트웨어는 인치 단위를 사용했고 NASA의 소프트웨어는 미터 단위를 사용했다. 이러한 버그로 인해 1.25억 달러에 달하는 화성 탐사선이 날아가고 만다. 2021. 8. 9.
화성 탐사선 큐리오시티의 소프트웨어 화성 탐사선 큐리오시티에 사용된 RTOS는 VxWorks이다. 소프트웨어는 GCC 4.1.2 C++ 컴파일을 사용하여 개발되었다. C++를 사용했지만 다음의 조건으로 개발하였다. Exceptions, Templates, Iostream 사용하지 않음 다중 상속 사용하지 않음 new와 delete을 제외하고 overload 사용하지 않음 커스텀 동적 할당 사용 2021. 8. 8.
STM32CubeIDE에서 printf와 scanf에서 float 변수 사용하기 STM32CubeIDE에서 printf와 scanf에서 float 변수를 사용하기 위해서는 다음의 옵션을 사용한다. -u _printf_float -u _scanf_float 위의 옵션이 있는 이유는 float printf와 float scanf 함수가 Flash 메모리를 많이 사용하기 때문이다. 2021. 7. 26.
STM32CubeIDE 최적화에 따른 파일 크기 STM32CubeIDE의 최적화 옵션에 따른 파일 크기는 다음과 같다. Optimization FLASH [kB] RAM [kB] None (O0) 101.61 9.5 for debug (Og) 78.02 9.5 (O1) 77.91 9.5 (O2) 74.77 9.5 (O3) 92.98 9.51 for size (Os) 70.51 9.5 for speed (Ofast) 92.98 9.51 파일크기가 가장 작은 것은 Os이고 그 다음은 O2이다. O3와 Ofast는 파일 크기가 동일하다. 2021. 7. 26.
STM32 타이머 계산 STM32의 타이머에서 ARR이 36일때 동작은 다음과 같다. 클럭이 37개될때마다 Update 펄스가 출력된다. Update 펄스의 주파수는 CK_CNT의 주파수에서 (ARR+1)을 나눈값이다. CNT와 ARR이 일치할 때 다음 클럭에서 CNT이 0이 되면서 Update 펄스가 출력된다. ARR을 CNT보다 작은 값으로 변경하면, 바로 Update 펄스가 출력되지 않고 CNT가 Overflow 되어 다음 ARR와 일치될 때 Update 펄스가 출력된다. ARR의 리셋 초기값은 0xFFFF이다. 2021. 7. 21.
라즈베리 파이 3 B+ 사양 라즈베리 파이 3 B+의 사양 CPU : DCM2837B0, Cortex-A53, 64비트, 1.4GHz LPDDR2 SDRAM 1GB Wifi 2.4GHz, 5GHz Bluetooth 4.2 BLE Gigabit Ethernet (300Mbps) GPIO x40 HDMI 4-pole stereo output Composite video USB 2.0 x4 Micro SD +5V / 2.5A Power-over-Ethernet 2021. 7. 17.
ARM의 64비트 곱셈 명령어 ARM Cortex-M3이나 Cortex-M4에는 32비트 정수를 곱하여 64비트 결과를 출력하는 명령어가 있다. umull : unsigned 32비트 정수를 곱한 64비트 결과값을 구한다. umlal : unsigned 32비트 정수를 곱한 64비트 정수를 구하고 여기에 64비트를 더하여 결과값을 구한다. smull : signed 32비트 정수를 곱한 64비트 결과값을 구한다. smlal : signed 32비트 정수를 곱한 64비트 정수를 구하고 여기에 64비트를 더하여 결과값을 구한다. 2021. 7. 11.
bss 영역 C 컴파일러에서 bss (Block Starting Symbol)는 초기화되지 않은 전역변수 또는 static 변수가 저장되는 RAM 영역을 의미한다. bss를 .bss라고도 한다. 지역변수는 RAM 영역 중 stack에 저장된다. stack에는 지역변수뿐만 아니라 함수나 인터럽터관련 데이터가 저장된다. 2021. 7. 3.
라즈베리 파이 핀 배열 라즈베리 파이의 40핀 배열은 다음과 같다. 모든 핀은 +3.3V 로직 입출력이다. 5V power는 입력전원과 바로 연결되어 있다. 3V3 power는 내부 스위칭 레귤레이터를 통해 출력되며 최대 전류는 500mA이다. 통신은 SPI 2개, I2C 2개, UART 1개가 있다. SPI0: MOSI(GPIO10) MISO(GPIO9) SCLK(GPIO11) CE0(GPIO8) CE1(GPIO7) SPI1: MOSI(GPIO20) MISO(GPIO19) SCLK(GPIO21) CE0(GPIO18) CE1(GPIO17) CE2(GPIO16) I2C1: Data(GPIO2) Clock(GPIO3) I2C2: EEPROM Data(GPIO0) EEPROM Clock(GPIO1) UART: TX(GPIO14) R.. 2021. 7. 3.
STM32 HAL DMA 사용시 주의사항 STM32의 HAL에서 UART, I2C, SPI 등에서 DMA을 사용할 때 다음 그림 같이 각 장치에 대한 인터럽트를 Enable 시켜야 한다. HAL_UART_Receive_DMA 함수를 보면 다음과 같이 인터럽트를 사용하는 코드가 있다. /* Enable the UART Parity Error Interrupt */ SET_BIT(huart->Instance->CR1, USART_CR1_PEIE); /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ SET_BIT(huart->Instance->CR3, USART_CR3_EIE); 위 코드는 UART 통신 중 에러가 발생했을 때 호출되는 인터럽트를 활성화 한다. 2021. 7. 3.
STM32 개발 라이브러리 종류 STM32 프로그램 개발을 위해 ST에서는 몇가지 종류의 라이브러리를 제공한다. 제공하는 라이브러리에는 Snippets과 SPL (Standard Peripheral Library)과 HAL API와 LL API의 4종류가 있다. 1. Snippets Snippets은 STM32F0과 STML0만 지원한다. 2. SPL(Standard Peripheral Library) SPL은 현재 지원이 중단되었고 최신 MCU는 더 이상 지원하지 않는다. 3. HAL(Hardware Abstraction Layer) HAL은 하드웨어를 사용하기 쉽게 만든 라이브러리이다. 하지만 속도가 느리다. 처음 사용할 때는 HAL 라이브러리 동작 구조를 이해하기가 어렵다. 특히 인터럽터나 DMA을 사용하는 함수는 구조가 매우 복.. 2021. 7. 3.
STM32 HAL 인터럽터와 DMA 함수 사용시 주의사항 STM32의 HAL에서 HAL_I2C_Master_Transmit_IT또는 HAL_I2C_Master_Transmit_DMA와 같은 함수를 사용할 때 이상한 데이터가 송수신되는 경우가 있다. 위와 같은 함수에서 전달되는 변수는 글로벌 변수를 사용해야 한다. 만약 로컬 변수를 사용하면 로컬 변수가 스택에서 해제되면 데이터가 유지되지 않기 때문에 이상한 데이터가 송수신 될 수 있다. 인터럽터나 DMA는 함수 실행이 끝나도 계속 동작하기 때문에 송수신할 데이터를 글로벌 변수에서 계속 유지하고 있어야 한다. 2021. 7. 1.
STM32의 HAL_SPI_TransmitReceive_IT 함수 동작원리 HAL_SPI_TransmitReceive_IT 함수이 실행되면 SPI 인터럽터가 실행되면서 SPI에 데이터를 쓰고 읽는다. 매 바이트마다 인터럽터 함수가 실행된다. SPI 인터럽터 함수는 stm32l1xx_it.c 파일에 있다. void SPIx_IRQHandler(void) { HAL_SPI_IRQHandler(&SpiHandle); } 인터럽터가 발생하면 실행되는 HAL_SPI_IRQHandler 함수는 stm32l1xx_hal_spi.c 파일에 정의되어 있다. 이 함수에서 SPI에 데이터를 쓰고 읽는다. HAL_SPI_IRQHandler 함수에서 송수신이 종료되면 HAL_SPI_TxRxCpltCallback 함수를 호출하고 에러가 발생하며 HAL_SPI_ErrorCallback 함수를 호출한다. .. 2021. 6. 30.
PL2303 드라이버 PL2303을 사용한 USB-UART 컨버터에서 장치관리자에서 PL2303HXA PHASED OUT SINCE 2012. PLEASE CONTACT YOUR SUPPLIER라는 메세지가 뜨면 이전 버전의 PL2303 드라이버를 설치하면 된다. 아래 드라이버를 설치하면 된다. 2021. 6. 30.
SPI의 CPOL과 CPHA SPI는 CPOL (Clock Polarity)와 CPHA (Clock Phase)를 설정할 수 있다. CPOL과 CPHA에 따른 파형은 다음과 같다. CPOL은 통신을 하지 않을 때 클럭이 High인지 Low인지를 나타낸다. CPHA가 0일 때는 첫번째 엣지에서 데이터를 인식하고 CPHA가 1일 때는 두번째 엣지에서 데이터를 인식한다. 2021. 6. 29.
블루투스 모듈 HC-06 블루투스 모듈 HC-06의 전원은 +3.6~+6V를 인가해야 한다. HC-06 보드의 IC는 +3.3V로 동작하고 보드에 +3.3V 레귤레이터가 내장 되어 있다. RX와 TX 신호는 +3.3V 신호이다. 아두이노에 연결한다면 TXD는 아두이노에 직접 연결할 수 있지만 RXD는 저항으로 2/3만큼 분압하여 아두이노에서 HC-06로 전달해야 한다. ☞ HC-06 명령어 2021. 6. 28.
ST SWIM 디버거 ST의 SWIM(Single Wire Interface Module)은 8비트 MCU인 STM8에서 사용되는 디버거이다. 이름이 나타내는 바와 같이 선 1개로 통신한다. ST-Link V2에서 SWIM은 다음과 같이 연결한다. SWIM의 4핀은 다음과 같다. 2021. 6. 28.
중국 짝퉁 ST-Link V2 중국에서 만든 짝퉁 ST-Link V2이다. 가격은 4천원 이하이다. JTAG은 되지 않고 SWD와 SWIM을 지원한다. RST, SWCLK, SWDIO 핀이 SWD로 사용되고 SWIM 핀이 SWIM으로 사용된다. +3.3V와 +5V 전원이 출력되기 때문에 외부 전원이 없어도 타겟 보더를 동작시킬 수 있다. 오리지날 ST-Link V2는 전원이 출력되지 않는다. 2021. 6. 28.
STM32 DMA 레지스터 STM32의 레지스터는 다음과 같다. 1. DMA interrupt status register (DMA_ISR) TEIF는 에러 플랙, HTIF는 Half 전송 플랙, TCIF는 전송 완료 플랙, GIF는 앞의 3개 중 하나가 발생하는 1이 되는 플랙이다. 2. DMA interrupt flag clear register (DMA_IFCR) 이 레지스터에 1을 쓰면 위의 DMA_ISR 플랙이 0으로 클리어 된다. 3. DMA channel x configuration register (DMA_CCRx) 모드, 데이터 비트, 우선순위 등을 설정한다. 0비트의 EN은 DMA를 Enable/Disable 설정하는 비트이다. 4. DMA channel x number of data register (DMA_C.. 2021. 6. 22.
저항 TCR 계산 저항의 TCR(Temperature Coefficient of Resistance)은 온도에 따른 저항값의 변화를 나타내는 지수이다. 저항의 TCR의 정의는 다음과 같다. TCR이 100 ppm/℃일 때 25℃에서 저항이 1이라면 125℃이라면 저항 변동은 다음과 같다. △R = (125-25)℃ x 100 ppm/℃ = 0.01Ω R = 1.01Ω ppm은 1/1,000,000 (백만분의 1)을 의미한다. 2021. 6. 10.
펌웨어(Firmware) 이란? 펌웨어(Firmware)는 PC의 바이오스나 임베디드 시스템의 소프트웨어와 같이 하드웨어와 밀접한 관련이 있는 소프트웨어를 의미한다. 펌웨어는 하드웨어와 소프트웨어의 사이에 있다. 펌웨어는 1967년에 처음 사용된 용어로 원래는 CPU의 마이크로코드로 작성된 것을 의미했다. CPU의 명령어(Instruction)는 마이크로코드(Microcode)로 분해되어 실행된다. 현재는 마이크로코드 뿐만 아니라 하드웨어와 접하는 소프트웨어를 펌웨어라고 부른다. 참고로 Firm은 '단단한' 또는 '변치않는' 이라는 뜻이다. 2021. 5. 28.
RTL 이란? RTL(Register-transfer level)은 레지스터와 로직회로를 이용하여 Synchronous 디지털 회로를 설계하는 레벨을 의미한다. 다음 그림과 같이 D 플립 플럽을 이용한 레지스터와 AND, NOT 등의 로직회로로 구성된 것을 RTL이라고 한다. VHLD 또는 Verilog 등으로 작성된 레벨이 RTL이고 RTL은 VHLD 또는 Verilog 등으로 구현한다. 흔히 RTL 코딩은 VHLD 또는 Verilog 코딩을 의미하고 RTL 엔지니어는 VHLD 또는 Verilog 엔지니어를 의미한다. 2021. 5. 5.
LVC와 LVC1G의 동작 전압 LVC의 동작 전압은 일반적으로 1.65~3.6V이다. LVC1G의 동작 전압은 일반적으로 1.65~5.5V이다. LVC1G는 게이트가 1개 내장되어 있다. LVC1G는 구조는 LVC이지만 더 높은 전압에서 동작할 수 있다. 2021. 5. 3.
VHDL component와 port map 사용법 VHDL에서 component는 C에서 함수와 비슷한 것으로 로직 모듈을 나타내는 것이다. port map은 component 사이의 연결을 나타내는 것이다. 아래 예제는 INV와 CMM이라는 컴포넌트를 사용한다. G1은 INV 컴포넌트의 인스턴스 이름이고 G2는 CMM 컴포넌트의 인스턴스 이름이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 library IEEE; use IEEE.STD_LOGIC_1164.all; entity MUX is port (SEL, A, B: in STD_LOGIC; F : out STD_LOGIC); end; architecture STRUCTURE of MUX is component INV .. 2021. 5. 1.
Code Composer Studio 버전 TI의 CCS (Code Composer Studio) 버전은 다음과 같다. Code Composer는 2001년 4.10 버전을 마지막으로 Code Composer Studio로 바뀌었다. Code Composer Studio 버전 ● 1.x : 1999년 ● 2.0 : 2001년 ● 3.0 : 2005년 ● 3.1 : 2005년 ● 3.2 : 2006년 ● 3.3 : 2006년 ● 4.0 : 2009년, Eclipse 3.2를 변형하여 만듬 ● 5.0 : 2010년, Eclipse 3.6 사용 ● 6.0 : 2014년, Eclipse 4.3 사용 ● 7.0 : 2016년, Eclipse 4.6 사용 3.3버전까지는 프로젝트 파일(prj)을 사용하고 그 이후 Eclipse를 사용한 버전부터는 프로젝터 .. 2021. 2. 26.
윈도우 10에서 Code Composer Studio 3.3 설치 CCS(Code Composer Studio) 3.3은 2006년 출시되었고 원래 윈도우 XP 환경에서 동작했다. 윈도우 10에서 CCS 3.3을 설치하기 위해서는 다음과 같이 하면된다. 1. TI 홈페이지에서 CCS 3.3을 다운받는다. 2. setup.exe을 관리자 권한으로 실행한다. 3. Error 1902 Service drpkiont ... 창이 뜨면 Ignore를 클릭한다. 4. Error 1902 Service XDSFast1_ISA_Bus_Driver ... 창이 뜨면 Ignore를 클릭한다. 5. DevCon is ... 창이 뜨면 OK를 클릭한다. 6. WARNING! CCS Scripting v1.5 .. 창이 뜨면 OK를 클릭한다. 7. CCS의 단축 아이콘 속성을 다음과 같이 설.. 2021. 2. 25.
Call Stack 이란? Call Stack이란 프로그램에서 호출된 함수에 관한 정보를 담고 있는 스택이다. Program stack이라고도 한다. TI의 CCS에서는 Debug 창에 Call stack이 있고 대부분의 개발환경에서 Call stack을 볼 수 있다. 2021. 1. 29.
반응형