New tool fm10k-flash #1
3 changed files with 33 additions and 12 deletions
14
fm10k-dump.c
14
fm10k-dump.c
|
@ -78,15 +78,13 @@ int main(int argc, char** argv){
|
||||||
|
|
||||||
unsigned int mbitsToRead = 8;
|
unsigned int mbitsToRead = 8;
|
||||||
|
|
||||||
|
const KNOWN_FLASH_DEVICE* knownFlashDevice = getKnownFlashFromManufacturerData(manufacturerInfo);
|
||||||
|
|
||||||
switch (manufacturerInfo.value >> 8) {
|
if(knownFlashDevice != NULL){
|
||||||
case 0x1f2701:
|
printf("Device: %s\n", knownFlashDevice->name);
|
||||||
printf("Device: Adesto AT45Dxxx Standard:1 32Mbit\n");
|
mbitsToRead = knownFlashDevice->sizeInMbit;
|
||||||
mbitsToRead = 32;
|
}else{
|
||||||
break;
|
printf("Device: Unknown, defaulting %uMbit size\n", mbitsToRead);
|
||||||
default:
|
|
||||||
printf("Device: Unknown, defaulting %uMbit size\n", mbitsToRead);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(argc > 3){
|
if(argc > 3){
|
||||||
|
|
16
fm10k.c
16
fm10k.c
|
@ -32,6 +32,11 @@
|
||||||
#include "fm10k.h"
|
#include "fm10k.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
KNOWN_FLASH_DEVICE KNOWN_FLASH_DEVICE_LIST[] = {
|
||||||
|
{{0x0101271f}, "Adesto AT45DB321E 32-Mbit", 32},
|
||||||
|
{{0}, "", 0}
|
||||||
|
};
|
||||||
|
|
||||||
void ReadRegister32(uintptr_t mem, uint32_t addr, uint32_t* value) {
|
void ReadRegister32(uintptr_t mem, uint32_t addr, uint32_t* value) {
|
||||||
*value = *(((uint32_t*)mem) + addr);
|
*value = *(((uint32_t*)mem) + addr);
|
||||||
}
|
}
|
||||||
|
@ -317,3 +322,14 @@ uint32_t fm10k_uio_spi_WriteFlash(uintptr_t mem, uint32_t address, const uint8_t
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const KNOWN_FLASH_DEVICE* getKnownFlashFromManufacturerData(SPI_COMMAND_READ_MANUFACTURER_RESULT data){
|
||||||
|
uint32_t deviceCount = (sizeof(KNOWN_FLASH_DEVICE_LIST) / sizeof(KNOWN_FLASH_DEVICE)) - 1;
|
||||||
|
for(uint32_t i = 0; i < deviceCount; ++i){
|
||||||
|
if(KNOWN_FLASH_DEVICE_LIST[i].data.value == data.value){
|
||||||
|
return &KNOWN_FLASH_DEVICE_LIST[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
15
fm10k.h
15
fm10k.h
|
@ -55,6 +55,7 @@
|
||||||
#if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 4)) || __clang__
|
#if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 4)) || __clang__
|
||||||
|
|
||||||
typedef union {
|
typedef union {
|
||||||
|
uint32_t value;
|
||||||
struct {
|
struct {
|
||||||
uint16_t Freq : 10; // Actual speed is PCIE_REFCLK/(2*(1+Freq))
|
uint16_t Freq : 10; // Actual speed is PCIE_REFCLK/(2*(1+Freq))
|
||||||
uint8_t Enable : 1;
|
uint8_t Enable : 1;
|
||||||
|
@ -70,21 +71,26 @@ typedef union {
|
||||||
uint8_t PinIO3 : 1; // volatile ReadWrite
|
uint8_t PinIO3 : 1; // volatile ReadWrite
|
||||||
uint8_t Reserved : 5;
|
uint8_t Reserved : 5;
|
||||||
} __attribute__((packed)) fields;
|
} __attribute__((packed)) fields;
|
||||||
uint32_t value;
|
|
||||||
} SPI_CTRL;
|
} SPI_CTRL;
|
||||||
|
|
||||||
typedef union {
|
typedef union {
|
||||||
|
uint32_t value;
|
||||||
struct {
|
struct {
|
||||||
uint8_t manufacturerId : 8;
|
uint8_t manufacturerId : 8;
|
||||||
uint8_t familyCode : 3;
|
|
||||||
uint8_t densityCode : 5;
|
uint8_t densityCode : 5;
|
||||||
uint8_t subCode : 3;
|
uint8_t familyCode : 3;
|
||||||
uint8_t productVariant : 5;
|
uint8_t productVariant : 5;
|
||||||
|
uint8_t subCode : 3;
|
||||||
uint8_t RESERVED : 8;
|
uint8_t RESERVED : 8;
|
||||||
} __attribute__((packed)) fields;
|
} __attribute__((packed)) fields;
|
||||||
uint32_t value;
|
|
||||||
} SPI_COMMAND_READ_MANUFACTURER_RESULT;
|
} SPI_COMMAND_READ_MANUFACTURER_RESULT;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
SPI_COMMAND_READ_MANUFACTURER_RESULT data;
|
||||||
|
char name[64];
|
||||||
|
uint32_t sizeInMbit;
|
||||||
|
} KNOWN_FLASH_DEVICE;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error "Packed bit-fields of type char were not properly bit-packed on many targets prior to GCC 4.4, upgrade to GCC >= 4.4."
|
#error "Packed bit-fields of type char were not properly bit-packed on many targets prior to GCC 4.4, upgrade to GCC >= 4.4."
|
||||||
#endif
|
#endif
|
||||||
|
@ -106,6 +112,7 @@ void fm10k_uio_spi_Disable(uintptr_t mem);
|
||||||
|
|
||||||
//Error if result.value is 0x00
|
//Error if result.value is 0x00
|
||||||
SPI_COMMAND_READ_MANUFACTURER_RESULT fm10k_uio_spi_ReadManufacturerData(uintptr_t mem);
|
SPI_COMMAND_READ_MANUFACTURER_RESULT fm10k_uio_spi_ReadManufacturerData(uintptr_t mem);
|
||||||
|
const KNOWN_FLASH_DEVICE* getKnownFlashFromManufacturerData(SPI_COMMAND_READ_MANUFACTURER_RESULT data);
|
||||||
|
|
||||||
uint32_t fm10k_uio_spi_ReadFlash(uintptr_t mem, uint32_t address, uint8_t* data, uint32_t len);
|
uint32_t fm10k_uio_spi_ReadFlash(uintptr_t mem, uint32_t address, uint8_t* data, uint32_t len);
|
||||||
uint32_t fm10k_uio_spi_WriteFlash(uintptr_t mem, uint32_t address, const uint8_t* data, uint32_t len);
|
uint32_t fm10k_uio_spi_WriteFlash(uintptr_t mem, uint32_t address, const uint8_t* data, uint32_t len);
|
Loading…
Reference in a new issue