cancel
Showing results for 
Search instead for 
Did you mean: 

Using DCMI Interface but only receiving 0xA603A603 before hard fault

SWeis.1
Associate

Hello there,

for my master thesis I am trying to receive data over DCMI with the STM32H742. As an image sensor I am using the NOIV2SN1300A. It sends data over 10 data lines, this data differs (so not always 0xA603A603 ). To reduce data size I have activated binning and subsampling.

I am using DMA to transfer the data received by DCMI into the internal SRAM at address 0x24000000. After a few telegrams (of 0xA603A603) the uC goes into hard fault and infinite loop. I am not sure why this error accurs. Here is my config for DMA and DCMI:

   /* DCMI DMA Init */

   /* DCMI Init */

   hdma_dcmi.Instance = DMA1_Stream0;

   hdma_dcmi.Init.Request = DMA_REQUEST_DCMI;

   hdma_dcmi.Init.Direction = DMA_PERIPH_TO_MEMORY;

   hdma_dcmi.Init.PeriphInc = DMA_PINC_DISABLE;

   hdma_dcmi.Init.MemInc = DMA_MINC_ENABLE;

   hdma_dcmi.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;//WORD;

   hdma_dcmi.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;

   hdma_dcmi.Init.Mode = DMA_DOUBLE_BUFFER_M0;

   hdma_dcmi.Init.Priority = DMA_PRIORITY_VERY_HIGH;

   hdma_dcmi.Init.FIFOMode = DMA_FIFOMODE_DISABLE;

   hdma_dcmi.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;

   hdma_dcmi.Init.MemBurst = DMA_MBURST_SINGLE;

   //hdma_dcmi.Init.PeriphBurst = DMA_PBURST_SINGLE;

   if (HAL_DMA_Init(&hdma_dcmi) != HAL_OK)

   {

     Error_Handler();

   }

   __HAL_LINKDMA(hdcmi,DMA_Handle,hdma_dcmi);

   HAL_NVIC_SetPriority(DCMI_IRQn, 0, 0);

   HAL_NVIC_EnableIRQ(DCMI_IRQn);

   HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);

   HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);

..........................

 hdcmi.Instance = DCMI;

 hdcmi.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;

 hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_FALLING;   //Todo:???

 hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_HIGH;

 hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_HIGH;

 hdcmi.Init.CaptureRate = DCMI_CR_ALL_FRAME;

 hdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_10B;

 hdcmi.Init.JPEGMode = DCMI_JPEG_DISABLE;

 hdcmi.Init.ByteSelectMode = DCMI_BSM_OTHER;//DCMI_BSM_ALL;

 hdcmi.Init.ByteSelectStart = DCMI_OEBS_ODD;

 hdcmi.Init.LineSelectMode = DCMI_LSM_ALL;

 hdcmi.Init.LineSelectStart = DCMI_OELS_ODD;

 if (HAL_DCMI_Init(&hdcmi) != HAL_OK)

 {

   Error_Handler();

 }

..............................................

uint32_t DataSizeImageSensor = 0xB160;

#define AddressFrameBuffer 0x24000000

HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT, (uint32_t)AddressFrameBuffer, DataSizeImageSensor);

Any idea why this error accurs? Like I said, I receive data, I am sure the sensor sends viable data (so something else then 0xA603A603), but I get only the same data by DCMI before hard fault.

0 REPLIES 0