아래의 그림은 STM32H745/55/47/57xx 의 Dual Core MCU의 시스템 아키텍처입니다. 보시는 것과 같이 Core만 두개일 뿐 대부분의 주변장치(Peripheral)은 각종 버스(AHB, APB)들에 의해 공유되는 것을 볼 수 있습니다. 이 얘기는 각 Core에서 독점적으로 사용되는 장치는 M7 Core에 Coupled 되어 있는 ITCM, DTCM 밖에 없다고 생각하시면 됩니다. 그런데, RCC의 몇몇 레지스터를 보면 아래와 같이 세가지로 구분되어 있는 것을 볼 수 있습니다. 이번 포스트는 왜 이렇게 구분되어 있는가에 대한 내용입니다. 분명 RCC는 블럭은 단 한개만 존재합니다. 그런데 마치 두개인 것 처럼 보입니다. 이는 RCC 레지스터 맵이 4개의 섹션으로 구분되어 있기 때문입니다..
Cortex®-M7 프로세서의 MPU(메모리 보호 장치)를 사용하면 영역별로 Level 1(L1) 캐시 속성(Attributes)을 수정할 수 있습니다. 캐시는 캐시 제어 레지스터에 의해 전역적으로 제어되지만 MPU는 캐시 모드와 영역에 대한 액세스를 캐시할 수 있는지 여부를 지정할 수 있습니다. 경우에 따라 캐시된 시스템은 공유 데이터를 처리할 때 코어와 주 메모리 간의 데이터 일관성을 보장해야 합니다. 이 애플리케이션 노트는 레벨 1 캐시 동작을 설명하고 L1 캐시를 사용할 때 STM32F7 시리즈 및 STM32H7 시리즈에서 데이터 일관성을 보장하는 방법을 보여주는 예를 제공합니다. MPU 및 메모리 유형 및 캐시 정책에 따라 메모리 속성을 설정하는 방법에 대한 자세한 내용은 http://w..
STM32CubeH7 패키지에는 OpenAMP 및 FreeRTOS™ 메시지 버퍼를 사용한 프로세서 간 통신을 포함하여 듀얼 코어 애플리케이션을 위한 몇 가지 예가 포함되어 있습니다. 다음 섹션에서는 OpenAMP 및 FreeRTOS™를 사용하는 몇 가지 예와 하드웨어 세마포어를 사용하는 기타 예를 설명합니다. OpenAMP 다음 그림은 CPU1을 마스터로, CPU2를 슬레이브로 정의한 예를 보여줍니다. 시스템 초기화 후 두 CPU 모두 OpenAMP 프레임워크 초기화를 담당하는 MX_OPENAMP_Init() 함수를 실행합니다. CPU2(슬레이브)는 엔드포인트 생성을 담당하며 이는 OPENAMP_create_endpoint() API를 사용하여 수행됩니다. 엔드포인트가 생성되자마자 마스터 CPU(..
경량 프로세서 간 통신 채널은 STM32H745/755 또는 STM32H747/757 장치에 내장된 사용 가능한 주변 장치를 사용하여 구현할 수 있습니다. 예를 들어, 인터럽트 라인은 이벤트를 알리거나 데이터 가용성을 전달하는 데 사용할 수 있습니다. DMA 채널과 같은 다른 주변 장치를 사용하여 데이터를 전송하고 한쪽에서 다른 쪽으로 전송 종료 알림을 생성할 수 있습니다. 이 솔루션은 맞춤형 솔루션이며 OpenAMP 또는 FreeRTOS™ 원격 메시징 구현만큼 일반적이지 않습니다. Hardware semaphore STM32 마이크로컨트롤러에 구현된 하드웨어 세마포어 주변 장치를 사용하면 두 CPU 간에 알림 및 이벤트 교환을 구현할 수 있습니다(아래 그림 참조). HSEM 주변 장치에서 CPU..
FreeRTOS message buffer and stream buffer 버전 10.0.0부터 FreeRTOS™에는 프로세서 간 통신 API를 구현되어 있습니다. 다음 섹션에서는 메시지 버퍼 및 스트림 버퍼 API에 대해 설명합니다. Message buffers 메시지 버퍼를 사용하면 인터럽트 서비스 루틴에서 작업으로 또는 한 작업에서 다른 작업으로 다양한 길이의 이산 메시지를 전달할 수 있습니다. 예를 들어, 길이가 10, 20, 123바이트인 메시지는 모두 동일한 메시지 버퍼에 쓰고 읽을 수 있습니다. 10바이트 메시지는 개별 바이트가 아닌 10바이트 메시지로만 읽을 수 있습니다. 메시지 버퍼는 스트림 버퍼 구현 위에 구축됩니다. 메시지 버퍼는 페이로드 데이터 크기를 저장하기 위해 단어가 필..
이 섹션에서는 STM32CubeH7 펌웨어와 함께 사용할 수 있는 프로세서 간 통신 라이브러리(OpenAMP 및 RPmsg API, FreeRTOS™ 메시지 버퍼 및 스트림 버퍼 API)에 대한 일반 정보를 제공합니다. 또한 STM32H745/755 및 STM32H747/757 하드웨어 리소스를 사용하는 몇 가지 기본 IPCC를 제공합니다. OpenAMP and RPMsg 이 섹션에서는 OpenAMP(개방형 비대칭 다중 처리) 및 RPMsg(원격 프로세서 메시징) 라이브러리에 대한 정보를 제공합니다. OpenAMP는 AMP(Asymmetric Multi-Processing) 시스템용 애플리케이션 개발에 필요한 소프트웨어 구성 요소를 제공하는 프레임워크입니다. remoteproc 및 RPMsg와..
STM32H7 시리즈 중에 Cortex-M7, Cortex-M4 Dual Core로 되어 있는 제품이 있습니다. 두개의 Core는 같은 버스를 공유하기도 하고 이에 따라 여러 자원들을 공유하게 됩니다. 하지만 이러한 이유 때문에 동시에 같은 자원을 점유하는 통일성에 문제가 생길 수도 있습니다. AN5617은 STM32H7 Dual Core의 Inter-processor communications를 다루고 있으며 이번 포스트에서는 영문 번역으로 축약해서 올려보고자 합니다. Introduction 고성능 STM32 마이크로컨트롤러와 소프트웨어 아키텍처에 대한 릴리스 제약은 보다 발전된 소프트웨어 솔루션의 가능성을 열어줍니다. 고급 소프트웨어 응용 프로그램은 독립적인 구성 요소를 동시에 실행해야 합니다..
STM32H7 Dua-core 에서 어떻게 Peripheral을 제어하고 할당하는지에 대해 어플리케이션 AN5557을 번역하여 확인해 봅시다. 주변 장치 할당은 CPU 및 도메인 모드에 따라 클록 게이팅을 자동으로 제어하기 위해 리셋 및 클록 컨트롤러(RCC)에서 사용되며, 전원 컨트롤러(PWR)에서 D1, D2 및 D3 도메인의 공급 전압을 제어하기 위해 사용됩니다. 그림 4. RCC 블록 다이어그램에서 볼 수 있듯이 RCC는 주로 시스템 리셋 제어, 클록 분배, 클록 게이팅 제어, 레지스터 인터페이스 및 다양한 클록 소스로 구성됩니다. 클럭 게이팅 제어는 주변 장치 할당을 담당합니다. RCC는 리셋, 시스템 및 주변 장치 클록 생성을 관리합니다. 내부 발진기 4개, 외부 크리스탈 또는 레조..