コード例 #1
0
ファイル: flashMx25.cpp プロジェクト: juvf/terem5
//эта функция читает из фрам через SPI в буфер flashBuffIn не более SIZE_BUF_FLASH байт
//после чтения из буфера flashBuffIn копируется в destination
void flashMx25Read(void *destination, uint32_t adrSource, uint16_t size)
{
	xSemaphoreTake(mutexFlash, portMAX_DELAY);
	if( !isInitial )
		initSpi2();
	uint16_t status;
	do
	{
		status = spiRDSR();
	} while(status & 1);
	if( size > SIZE_BUF_FLASH )
	{
		xSemaphoreGive(mutexFlash);
		return;
	}
	DMA_MemoryTargetConfig(DMA1_Stream3, (uint32_t)flashBuffIn, 0);
	flashBuffOut[0] = 3; //Command Read
	flashBuffOut[1] = adrSource >> 16;
	flashBuffOut[2] = adrSource >> 8;
	flashBuffOut[3] = adrSource;
	startSpi(size + 4);
	spiWait();
	memcpy(destination, (void*)(flashBuffIn + 4), size);
	xSemaphoreGive(mutexFlash);
}
コード例 #2
0
ファイル: flashMx25.cpp プロジェクト: juvf/terem5
void spiChipErase()
{
	xSemaphoreTake(mutexFlash, portMAX_DELAY);
	if( !isInitial )
		initSpi2();
	uint16_t status;
	do
	{
		status = spiRDSR();
	} while(status & 1);
	spiWREN();
	flashBuffOut[0] = 0x60;
	startSpi(1);
	spiWait();
	xSemaphoreGive(mutexFlash);
}
コード例 #3
0
ファイル: bus_spi.c プロジェクト: 22vlalesflics/Triflight
bool spiInit(SPI_TypeDef *instance)
{
#if (!(defined(USE_SPI_DEVICE_1) && defined(USE_SPI_DEVICE_2)))
    UNUSED(instance);
#endif

#ifdef USE_SPI_DEVICE_1
    if (instance == SPI1) {
        initSpi1();
        return true;
    }
#endif
#ifdef USE_SPI_DEVICE_2
    if (instance == SPI2) {
        initSpi2();
        return true;
    }
#endif
    return false;
}
コード例 #4
0
ファイル: flashMx25.cpp プロジェクト: juvf/terem5
void flashMx25Write(uint8_t *source, uint32_t adrDestination) //пишет во флешку 256 байт
{
	xSemaphoreTake(mutexFlash, portMAX_DELAY);
	if( !isInitial )
		initSpi2();
	uint16_t status;
	do
	{
		status = spiRDSR();
	} while(status & 1);
	spiWREN();
	flashBuffOut[0] = 2; //Command Page Programm
	flashBuffOut[1] = adrDestination >> 16;
	flashBuffOut[2] = adrDestination >> 8;
	flashBuffOut[3] = adrDestination;
	memcpy((void*)(flashBuffOut + 4), (void*)source, 256);
	startSpi(SIZE_BUF_FLASH);
	spiWait();
	xSemaphoreGive(mutexFlash);
}
コード例 #5
0
ファイル: flashMx25.cpp プロジェクト: juvf/terem5
void spiSector4kErase(uint32_t numSector)
{
	xSemaphoreTake(mutexFlash, portMAX_DELAY);
	if( !isInitial )
		initSpi2();
	uint16_t status;
	do
	{
		status = spiRDSR();
	} while(status & 1);

	spiWREN();
	flashBuffOut[0] = 0x20;
	flashBuffOut[1] = numSector >> 16;
	flashBuffOut[2] = numSector >> 8;
	flashBuffOut[3] = numSector;
	startSpi(4);
	spiWait();
	xSemaphoreGive(mutexFlash);
}