use crate::domain::chip::*;
use crate::domain::types::*;
pub fn get_all_spi_eeprom() -> Vec<ChipSpec> {
let mut chips = Vec::new();
chips.extend(atmel_chips());
chips.extend(microchip_chips());
chips.extend(st_chips());
chips
}
fn atmel_chips() -> Vec<ChipSpec> {
vec![
spi_eeprom("AT25010", "Atmel", 128, 8), spi_eeprom("AT25020", "Atmel", 256, 8), spi_eeprom("AT25040", "Atmel", 512, 8), spi_eeprom("AT25080", "Atmel", 1024, 32), spi_eeprom("AT25160", "Atmel", 2048, 32), spi_eeprom("AT25320", "Atmel", 4096, 32), spi_eeprom("AT25640", "Atmel", 8192, 32), spi_eeprom("AT25128", "Atmel", 16384, 64), spi_eeprom("AT25256", "Atmel", 32768, 64), spi_eeprom("AT25512", "Atmel", 65536, 128), spi_eeprom("AT25M01", "Atmel", 131072, 256), ]
}
fn microchip_chips() -> Vec<ChipSpec> {
vec![
spi_eeprom("25LC010A", "Microchip", 128, 16),
spi_eeprom("25LC020A", "Microchip", 256, 16),
spi_eeprom("25LC040A", "Microchip", 512, 16),
spi_eeprom("25LC080A", "Microchip", 1024, 16),
spi_eeprom("25LC160A", "Microchip", 2048, 16),
spi_eeprom("25LC320A", "Microchip", 4096, 32),
spi_eeprom("25LC640A", "Microchip", 8192, 32),
spi_eeprom("25LC128", "Microchip", 16384, 64),
spi_eeprom("25LC256", "Microchip", 32768, 64),
spi_eeprom("25LC512", "Microchip", 65536, 128),
spi_eeprom("25LC1024", "Microchip", 131072, 256),
]
}
fn st_chips() -> Vec<ChipSpec> {
vec![
spi_eeprom("M95010", "STMicroelectronics", 128, 16),
spi_eeprom("M95020", "STMicroelectronics", 256, 16),
spi_eeprom("M95040", "STMicroelectronics", 512, 16),
spi_eeprom("M95080", "STMicroelectronics", 1024, 32),
spi_eeprom("M95160", "STMicroelectronics", 2048, 32),
spi_eeprom("M95320", "STMicroelectronics", 4096, 32),
spi_eeprom("M95640", "STMicroelectronics", 8192, 32),
spi_eeprom("M95128", "STMicroelectronics", 16384, 64),
spi_eeprom("M95256", "STMicroelectronics", 32768, 64),
spi_eeprom("M95512", "STMicroelectronics", 65536, 128),
spi_eeprom("M95M01", "STMicroelectronics", 131072, 256),
]
}
fn spi_eeprom(name: &str, manufacturer: &str, capacity_bytes: u32, page_size: u32) -> ChipSpec {
let capacity_code = match capacity_bytes {
128 => 0x01,
256 => 0x02,
512 => 0x03,
1024 => 0x04,
2048 => 0x05,
4096 => 0x06,
8192 => 0x07,
16384 => 0x08,
32768 => 0x09,
65536 => 0x0A,
131072 => 0x0B,
_ => 0x00,
};
let page_code = match page_size {
8 => 0x01,
16 => 0x02,
32 => 0x03,
64 => 0x04,
128 => 0x05,
256 => 0x06,
_ => 0x00,
};
ChipSpec {
name: name.to_string(),
manufacturer: manufacturer.to_string(),
jedec_id: JedecId::new([0xFE, capacity_code, page_code]),
flash_type: FlashType::SpiEeprom,
capacity: Capacity::bytes(capacity_bytes),
layout: ChipLayout {
page_size,
block_size: page_size, oob_size: None,
is_dataflash: false,
},
capabilities: ChipCapabilities {
supports_4byte_addr: capacity_bytes > 65536,
..Default::default()
},
otp: None,
}
}