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