IPU(Intelligence Processing Unit) 정리

서론 어느 AP(SOC)의 코어에 MPU, DSP, GPU 외에 IPU가 있었다. 처음보는 코어라 검색을 했는데, 데이터시트의 IPU(Image Processing Unit)가 아닌 다른 IPU(Intelligence Processing Unit)를 검색하고 있었음을 알게 되었다. 들였던 시간이 아까우니 간단하게 기록을 남긴다. IPU(Intelligence Processing Unit)

임베디드에서의 UART, I2C, SPI 사용 비교

직렬 전송방식 임베디드 시스템에서 통신으로 가장 많이 사용하는 것이 UART, I2C, SPI다. 이들은 모두 직렬 전송 방식이다. 병렬 전송방식은 데이터 전송을 위한 단자와 선이 많이 필요하기 때문에 직렬 대비 속도가 빠름에도 선호되지 않는다. 단자와 선이 많으면 단가가 올라간다. 개인적인 경험상 그림의 TI AMIC110과 같은 모든 SoC는 UART, SPI, I2C 인터페이스를 모두 내장하고 있었다. UART, I2C, … Read more

UART에 RS232를 연결하는 이유

다른 글 임베디드에서의 UART, I2C, SPI 사용 비교 서론 임베디드는 대부분 호스트 PC에서 디버깅이 필요하다. 따라서 호스트 PC와 타겟보드간 연결이 필요하고 이 연결을 주로 UART가 담당한다. 시중에 판매하는 UART to USB Converter를 구매하면 쉽게 연결할 수 있다. 학교에서는 위와 같은 방법으로 디버깅을 했다. 그런데 실무에 와서 보니 UART에 RS232를 연결하여 PC와 통신한다. 이유는 무엇인가? 장거리 … Read more

QSPI(Quad SPI) 사용 이유

서론 SoC 데이터 시트의 인터페이스 쪽에 QSPI(Quad Serial Peripheral Interface, Quad SPI)를 볼 수 있는 경우가 있다. 인터페이스가 아니라면 메모리 쪽에 QSPI Flash라고 적혀있기도 하다. SPI (Serial Peripheral Interface) 임베디드에서 흔하게 쓰이는 인터페이스 중 하나가 SPI다. SPI는 1970년대 모토롤라가 개발한 동기 직렬방식의 인터페이스다. 비교적 전송거리가 짧지만 고속 통신이 가능하여 현재까지 이용되며 주로 Processor-Processor, Processor-flash 통신에 … Read more

Full Duplex(전이중 통신), Half Duplex(반이중 통신), Simplex(단방향 통신) 정리

서론 임베디드에서 가장 많이 쓰이는 인터페이스 중 하나인 SPI는 Full Duplex를 지원한다고 한다. Full Duplex는 무엇인가 Full Duplex, Half Duplex, Simplex Full Duplex(전이중 통신), Half Duplex(반이중 통신), Simplex(단방향 통신)는 두 디바이스 간 통신에서 방향성을 정의하는 용어다. Full Duplex Half Duplex Simplex

[C, C++] pragma pack 개념과 사용이유

구조체의 크기 구조체의 크기는 구조체 변수 중 크기가 가장 큰 자료형을 기준으로 배수만큼 커진다. 즉 구조체의 크기는 변수의 크기에 패딩비트(구조체 크기를 가장 큰 자료형 기준으로 배수만큼 만들어주기 위해 추가되는 비트)가 더해져서 변수보다 더 큰 구조체 크기를 가질 수 있고 이는 메모리 낭비를 초래한다. 더 자세한 내용은 아래 링크를 참고한다. [C, C++] 구조체의 패딩비트와 크기 최적화 … Read more

[C, C++] 공용체(union) 개념과 통신에서의 사용 이유

서론 아마 c언어를 배웠던 사람이라도 이 union은 모르는 사람이 많을 것 같다. 내가 그랬고 내 주변도 그랬다. 그런데 임베디드를 개발하면서 남들이 작성한 코드에 union이 있었고 코드 분석을 위해서 알아야 했다. 그리고 union의 편리성을 알고 나서 나조차도 쓰게 되었다. union union은 struct와 유사하지만 union의 변수 중 가장 큰 변수의 메모리를 모든 변수가 공유한다는 점에서 다르다. 같은 … Read more

[C, C++] 메모리 직접 접근으로 값 변경, 출력

메모리 직접 접근 C언어에서의 메모리 접근은 포인터를 이용하지만 포인터를 사용하지 않고 직접 접근할 수도 있다. 그러나 일반적으로 커널 영역을 이용하지 않고 하드웨어를 직접 접근하는 것은 위험한 행위라서 권장하지는 않는다. 물론 메모리에 대한 정보를 정확히 알 수 있다면 이 위험성은 덜어낼 수 있을 것이다. 직접 접근할 메모리 확인을 위한 포인터 p를 만들고 값을 넣어준다. 그리고 포인터 … Read more

[C, C++] volatile 변수의 필요성

volatile? C언어의 컴파일러는 똑똑해서 자동으로 코드 최적화를 해주는 기능을 가지고 있다. 예를 들어 아래의 코드에서 for문은 의미가 없는 코드이다. for문 내에 어떠한 내용도 없기 때문이다. 따라서 시간만 잡아먹는 이 의미 없는 for문을 컴파일러가 자동으로 지워버린다. 그러나 volatile과 함께라면 컴파일러는 의미없는 for문이라도 최적화를 하지 않고 실행한다. 위에서 C언어의 컴파일러는 자동으로 최적화를 한다고 했는데, 이는 컴파일러의 최적화 … Read more

[C, C++] 구조체의 패딩비트와 크기 최적화

구조체 크기의 의문점 구조체 크기는 멤버 전체 크기 합과 다른 경우가 많다. 실제로 그런지 확인해보자. 구조체 크기 테스트 ** 아래 결과는 컴파일러에 따라 다를 수 있다. test1 test1 구조체는 int 하나를 포함하므로 4바이트가 예상되며 실제 결과도 그와 같다. test2 test2 구조체는 char 하나를 포함하므로 1바이트가 예상되며 실제 결과도 그와 같다. test3 test3 구조체는 int 하나와 … Read more