Skip to content

Chip conception

Taras edited this page Mar 8, 2020 · 6 revisions

Problems

Currently, there are many different types of NAND Flash chips from different manufacturers and new ones are emerging all the time. As the JuliProg project is not commercial and I do it in my spare time, so maintaining a current list of supported chips is very difficult.   It was decided the process of creating and testing new chips to "outsourcing" to JuliProg users themselves .This will fill the list of supported chips regardless of the author

I HOPE THIS IDEA WORKS :-)

The solution to the problem

Dependency Injection (DI) mechanism (MEF based) selected to attach the chip to Juliprog.

The chip is a set of dll (the [chip].dll and a set of dll with implementations of additional functionality). This principle allows very flexible adjustment of the chip itself, its behavior, its functionality.

To create a new or edit an existing one, you only need to edit the dll of the chip, all the other dlls are used as ready modules and used as is.
More details will be described here

NAND Flash Chip (in the context of the JuliProg programmer) is a modular design that consists of required and optional sections.

To quickly create a new chip, just describe the Required section and add basic operations with the chip (Read, Block Erase, Page Program, Reset). This will be the basic version of the chip that can be fully tested and used. Anyone can supplement this chip with registers, additional memory areas, additional operations, and more. Thus releasing a new version of the chip

Required section

This section defines the main parameters of the chip, such as

Parameter Value Description
devManuf "SAMSUNG" chip manufacturer
name "K9F1G08U0D" chip name
width Organization.x8 or x16 chip width - 8 bit or 16 bit
bytesPP 0x0800 page size - 2048 byte (2Kb) (for example)
spareBytesPP 0x40 size Spare Area - 64 byte (for example)
pagesPB 0x40 the number of pages per block - 64 (for example)
bloksPLUN 0x0400 number of blocks in CE - 1024 (for example)
LUNs 0x01 the amount of CE in the chip (for example)
colAdrCycles 0x02 cycles for column addressing (for example)
rowAdrCycles 0x03 cycles for row addressing (for example)

These parameters are defined in the ChipAssembly class constructor. This is enough to mount the chip to the programmer. In this step, in the programmer window we get a fully formed structure of chips (CE, blocks, pages). However, we will not be able to perform any operations on these items.

Optional section

This section forms a link to an external dll that performs basic chip operations (Read, Block Erase, Page Programe , Reset). It also joins other dll that implement chip registers (ID Register, Status Register, and others) and dll that implement their operations , interpretation etc .
As well as additional memory areas (OTP and others) and operations on these areas.