Init
This commit is contained in:
commit
34e3c899ba
|
|
@ -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, ®, timeout);
|
||||
SpiPortChipRelease(flashIO, timeout);
|
||||
|
||||
// Команда стирания сектора
|
||||
SpiPortChipSelect(flashIO, timeout);
|
||||
reg = 0x20;
|
||||
SpiPortTransmit(flashIO, ®, 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, ®, 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, ®, timeout);
|
||||
SpiPortChipRelease(flashIO, timeout);
|
||||
|
||||
|
||||
// Команда записи
|
||||
SpiPortChipSelect(flashIO, timeout);
|
||||
reg = 0x02;
|
||||
SpiPortTransmit(flashIO, ®, 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, ®, timeout);
|
||||
}
|
||||
SpiPortChipRelease(flashIO, timeout);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue