본문 바로가기

SPI

(46)
CH32V307 SM - SPI, SPI DMA 테스트 CH32V307은 3개의 SPI가 있고 최대 36Mhz 로 구동된다. CH32V307의 SPI 기본 동작 테스트 코드 void SPI_FullDuplex_Init(void) { GPIO_InitTypeDef GPIO_InitStructure={0}; SPI_InitTypeDef SPI_InitStructure={0}; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; G..
CH32V003 SSM - Arduino SPI테스트 CH32V003 Arduino 개발환경 테스트에서 확인 결과 디폴트로 SPI가 disable 되어 있다. CH32V003 Aduino 환경에서 CH32V003의 SPI 제어를 하려면 먼저 Variant (\AppData\Local\Arduino15\packages\WCH\hardware\ch32v\1.0.3\system\) 파일에서 SPI_MODULE_ENABLE 설정을 해 주어야 한다. /* ENABLE Peripherals */ // #define ADC_MODULE_ENABLED #define UART_MODULE_ENABLED #define SPI_MODULE_ENABLED #define I2C_MODULE_ENABLED // SPI definitions #ifndef PIN_SPI_SS #def..
CH32V003 SSM - SPI DMA 동작 테스트 소형 MCU에서 가장 많이 사용하는 페리는 SPI가 아닐까? CH32V003에서 SPI 동작 테스트를 해 보자. CH32V003 SSM EVM 보드에서 SPI는 PC5, PC6, PC7에 할당 되어 있다. CH32V003의 SPI 최대 클럭 속도는 24Mhz로 STM32F030 SPI 클럭속도 보다 더 빠르다. CH32V003의 SPI 기본 동작 테스트 코드 int main(void) { u8 i; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); Delay_Init(); USART_Printf_Init(115200); printf("SystemClk:%d\r\n",SystemCoreClock); #if (SPI_MODE == SLAVE_MODE) printf("SLA..
GD32F130 - SPI 테스트, SPI 전송 속도 향상 및 DMA 사용하기 GD32F130의 SPI 클럭 속도는 18Mhz이다. #define LED1 PA1 void setup() { digitalWrite(LED1, 0); pinMode(LED1, OUTPUT); Serial.begin(115200); Serial.println("GD32 Test"); } unsigned char buf[3] = {1,2}; void loop() { SPI.transfer(buf, sizeof(buf)); SPI.transfer(buf, sizeof(buf)); } 테스트 결과 18Mhz 클럭이 출력되고 SPI출력 지연 시간은 1.1us로 최대 속도를 위해서는 SPI DMA를 사용해야 할것 같다. Arduino 코드 특성상 SPI Read, Write 부분을 1Byte식 처리 하도록 되어 ..
ESP32-S2 SM - SPI테스트 Arduino IDE에서 ESP32-S2의 SPI 는 디폴트로 GPIO35 ~ 36에 할당되어 있다. static const uint8_t SS = 34; static const uint8_t MOSI = 35; static const uint8_t MISO = 37; static const uint8_t SCK = 36; ESP32-S2의 SPI 테스트를 위해 아래 코드로 테스트 해보았다. #include #define LED_PIN1 18 void setup() { pinMode(LED_PIN1, OUTPUT); Serial.begin(115200); SPI.begin(); SPI.beginTransaction(SPISettings(80000000, MSBFIRST, SPI_MODE0)); } uns..
[RP2040_W5500] RP2040 C++ SDK 환경에서 SPI DMA 성능 측정, Arduino 개발환경과 속도 비교 RP2040 을 SDK에서 구동하면 Aduino 개발환경에서 보다 속도가 빨라지는데 SPI DMA 테스트도 RP2040 C/C++ SDK로 테스트 해보자. Aduino IDE에서 SPI 테스트 했던 코드로 SPI 속도를 측정해 보자. SDK에서 제공하는 SPI 예제를 이용하여 기본 테스트를 해 볼수 있다. #include #include #include "pico/stdlib.h" #include "pico/binary_info.h" #include "hardware/spi.h" int main() { stdio_init_all(); printf("Hello, MPU9250! Reading raw data from registers via SPI...\n"); // This example will use..
[GD32-48 SSM] GD32F303 SPI DMA 테스트 GD32F303보드의 SPI 최대 클럭속도는 스펙상 30Mhz까지 가능하다. 핀투핀 호환되는 STM32F103 보드의 SPI 전송 테스트를 SPI DMA 와 비교해서 테스트 해보자 먼저 STM32CubeIDE를 이용하여 새로운 프로젝트를 생성하고 SPI 세팅을 한다. STM32CubeIDE에서 SPI 클럭 설정은 STM32F103 기준이라 최대 클럭주파수이상 설정하면 경고가 발생한다. GD32F303의 경우 120Mhz까지 설정 가능하므로 SPI클럭을 60Mhz로 설정이 가능하다. SPI DMA를 사용하지 않으면 SPI 출력 간격이 650ns정도로 측정이 된다. SPI DMA를 추가 해보자. GD32 SPI DMA 사용을 위해 SPI1_TX 를 추가 한다. GD32F303 에서 SPI DMA를 사용하면 ..
RP2040 Arduino IDE에서 SPI DMA 사용하기 Arduino IDE 개발환에서 RP2040의 SPI 전송률 테스트 하면 데이터 전송 간격이 1.2us 정도로 측정 된다.(RP2040 SPI테스트 참고) 고속의 데이터 전송을 위해서는 DMA가 필요한데 RP2040에서 SPI DMA 테스트를 진행 해 보자. DMA 초기화 함수 #include "hardware/dma.h" int32_t dma_tx_channel; dma_channel_config dma_tx_config; #define SPI_X spi0 bool initDMA(bool ctrl_cs) { //ctrl_cs = ctrl_cs; // stop unused parameter warning dma_tx_channel = dma_claim_unused_channel(false); if (dm..

반응형