cancel
Showing results for 
Search instead for 
Did you mean: 

STM32H723 SPI6 with BDMA doesn't work under Arduino Framework

thisdp
Associate II

Here's the definition of some functions that is used to allocate variable in D3 SRAM.

 

typedef struct {
  uint16_t PackType;
  uint8_t Data[8];
  uint8_t reserved[2];
}PinBasePack;

#define sMemory(mem,type) ((type *)(sMem(&mem,sizeof(type))))

typedef struct  {
    size_t heapPointer;
}MemoryController;

void* sMem(MemoryController* mc, size_t size) {
    if (size > 4) {
        size_t alignment = 4; // 4Byte Align
        mc->heapPointer = (mc->heapPointer + (alignment - 1)) & ~(alignment - 1);
    }
    void* ptr = (void*)(mc->heapPointer);
    mc->heapPointer += size;
    memset(ptr,0,size);
    return ptr;
}

MemoryController RD3 = {
	.heapPointer = 0x38000000+0x1000,
};

PinBasePack *DMASyncTX = 0;
PinBasePack *DMASyncRX = 0;

 

Here's the code under setup/main.

 

DMASyncTX = sMemory(RD3,PinBasePack);
DMASyncRX = sMemory(RD3,PinBasePack);
HAL_SPI_TransmitReceive_DMA(&hspi6, (uint8_t *)DMASyncTX, (uint8_t*)DMASyncRX, sizeof(PinBasePack));

 

 DMASyncRX can be overwritten by BDMA using CubeIDE, but nothing happened using Arduino.

I checked all configurations of SPI6 and BDMA are the same (even watching the values of SPI6 and BDMA).

The counter of hdma_spi6_rx is changing in both CubeIDE and Arduino.

Any clue for this difficult miscellaneous problem?🤔

1 REPLY 1
STOne-32
ST Employee

Hi @thisdp ,

You need to check how linker is setup and compare the addresses of buffers if same inside SRAM areas.

Hope it helps ,

STOne-32