This commit is contained in:
cfif 2024-12-04 13:10:49 +03:00
commit 34e3c899ba
3 changed files with 182 additions and 0 deletions

141
Flash_MX25L12833FM2I.c Normal file
View File

@ -0,0 +1,141 @@
//
// Created by ilya on 01.02.23.
//
#include "Flash_MX25L12833FM2I.h"
#include "SystemDelayInterface.h"
uint8_t flashMX25_read_status(tSpiPortIO *flashIO, uint32_t timeout) {
uint16_t operation = 0x05;
uint16_t dummy = 0x00;
uint16_t back;
SpiPortChipSelect(flashIO, timeout);
SpiPortTransmit(flashIO, &operation, timeout);
uint32_t endMs = SystemGetMs() + timeout;
uint16_t status = 1;
// Ожидание готовности
while ((status) && (endMs > SystemGetMs())) {
SpiPortTransmit(flashIO, &dummy, timeout);
SpiPortReceive(flashIO, &status, timeout);
}
SpiPortChipRelease(flashIO, timeout);
if (endMs < SystemGetMs())
return 0xFF;
return status;
}
uint16_t flashMX25_read_id(tSpiPortIO *flashIO, uint32_t timeout, uint8_t *buf) {
uint16_t operation = 0x9F;
uint16_t dummy = 0x00;
uint16_t back=0;
uint8_t id1=0;
uint16_t id2=0;
SpiPortChipSelect(flashIO, timeout);
SpiPortTransmit(flashIO, &operation, timeout);
for (uint32_t i=0; i<3; ++i) {
SpiPortReceive(flashIO, &back, timeout);
buf[i] = back;
}
SpiPortChipRelease(flashIO, timeout);
return (id2 << 8) | id1;
}
uint8_t flashMX25_SectorErase(tSpiPortIO *flashIO, uint32_t addr, uint32_t timeout) {
uint16_t reg;
uint16_t address=0;
// Команда разрешения записи
SpiPortChipSelect(flashIO, timeout);
reg = 0x06;
SpiPortTransmit(flashIO, &reg, timeout);
SpiPortChipRelease(flashIO, timeout);
// Команда стирания сектора
SpiPortChipSelect(flashIO, timeout);
reg = 0x20;
SpiPortTransmit(flashIO, &reg, timeout);
// Запись адреса
for (int i=2; i>=0; --i) {
address = ((uint8_t*)&addr)[i];
SpiPortTransmit(flashIO, &address, timeout);
}
SpiPortChipRelease(flashIO, timeout);
uint8_t status = flashMX25_read_status(flashIO, timeout);
if (status != 0)
return status;
return status;
}
uint8_t flashMX25_read(tSpiPortIO *flashIO, uint32_t addr, uint8_t* bufRead, uint32_t total_len, uint32_t timeout) {
uint16_t reg=0;
uint16_t address=0;
uint16_t back=0;
SpiPortChipSelect(flashIO, timeout);
// Команда чтения
reg = 0x03;
SpiPortTransmit(flashIO, &reg, timeout);
// Запись адреса
for (int i=2; i>=0; --i) {
address = ((uint8_t*)&addr)[i];
SpiPortTransmit(flashIO, &address, timeout);
}
// Чтение данных
for (uint32_t i=0; i<total_len; ++i) {
SpiPortReceive(flashIO, &back, timeout);
bufRead[i] = back;
}
SpiPortChipRelease(flashIO, timeout);
return back;
}
uint8_t flashMX25_write(tSpiPortIO *flashIO, uint32_t addr, uint8_t *bufWrite, uint32_t total_len, uint32_t timeout) {
uint16_t reg=0;
uint16_t address=0;
uint16_t back=0;
uint8_t status=0;
// Команда разрешения записи
SpiPortChipSelect(flashIO, timeout);
reg = 0x06;
SpiPortTransmit(flashIO, &reg, timeout);
SpiPortChipRelease(flashIO, timeout);
// Команда записи
SpiPortChipSelect(flashIO, timeout);
reg = 0x02;
SpiPortTransmit(flashIO, &reg, timeout);
// Запись адреса
for (int i=2; i>=0; --i) {
address = ((uint8_t*)&addr)[i];
SpiPortTransmit(flashIO, &address, timeout);
}
// Запись данных
for (uint32_t i=0; i<total_len; ++i) {
reg = bufWrite[i];
SpiPortTransmit(flashIO, &reg, timeout);
}
SpiPortChipRelease(flashIO, timeout);
return status;
}

19
Flash_MX25L12833FM2I.h Normal file
View File

@ -0,0 +1,19 @@
//
// Created by ilya on 01.02.23.
//
#ifndef UVEOS_ON_NATION_FLASH_MX25L12833FM2I_H
#define UVEOS_ON_NATION_FLASH_MX25L12833FM2I_H
#include "inttypes.h"
#include "SpiPort.h"
extern uint8_t flashMX25_read(tSpiPortIO *flashIO, uint32_t addr, uint8_t* bufRead, uint32_t total_len, uint32_t timeout);
extern uint8_t flashMX25_write(tSpiPortIO *flashIO, uint32_t addr, uint8_t* bufWrite, uint32_t total_len, uint32_t timeout);
extern uint8_t flashMX25_SectorErase(tSpiPortIO *flashIO, uint32_t addr, uint32_t timeout);
extern uint16_t flashMX25_read_id(tSpiPortIO *flashIO, uint32_t timeout,uint8_t *buf);
#endif //UVEOS_ON_NATION_FLASH_MX25L12833FM2I_H

22
modular.json Normal file
View File

@ -0,0 +1,22 @@
{
"dep": [
{
"type": "git",
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
"repo": "SpiPort"
},
{
"type": "git",
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
"repo": "SystemDelayInterface"
}
],
"cmake": {
"inc_dirs": [
"./"
],
"srcs": [
"./**.c"
]
}
}