NOR Driver and Device Characteristics

NOR devices, no matter what attachment interface (serial or parallel), share certain characteristics. The medium is always organized into units (called blocks) which are erased at the same time; when erased, all bits are 1. Only an erase operation can change a bit from a 0 to a 1, but any bit can be individually programmed from a 1 to a 0. The μC/FS driver requires that any 2-byte word can be individually accessed (read or programmed).

The driver RAM requirement depends on flash parameters such as block size and run-time configurations such as sector size. For a particular instance, a general formula can give an approximate:

    if (secs_per_blk < 255) {
        temp1 = ceil(blk_cnt_used / 8) + (blk_cnt_used * 1);
    } else {
        temp1 = ceil(blk_cnt_used / 8) + (blk_cnt_used * 2);
    }
    if (sec_cnt < 65535) {
        temp2 = sec_cnt * 2;
    } else {
        temp2 = sec_cnt * 4;
    }
    temp3 = sec_size;
    TOTAL = temp1 + temp2 + temp3;

where

secs_per_blk

The number of sectors per block.

blk_cnt_used

The number of blocks on the flash which will be used for the file system.

sec_cnt

The total number of sectors on the device.

sec_size

The sector size configured for the device, in octets.

 

secs_per_blk and sec_cnt can be calculated from more basic parameters :

    secs_per_blk = floor(blk_size / sec_size);
    sec_cnt      = secs_per_blk * blk_cnt_used;

where

blk_size

The size of a block on the device, in octets

 

Take as an example a 16-Mb NOR that is entirely dedicated to file system usage, with a 64-KB block size, configured with a 512-B sector. The following parameters describe the format :

    blk_cnt_used = 32;
    blk_size     = 65536;
    sec_size     = 512;
    secs_per_blk = 65536 / 512 = 128;
    sec_cnt      = 128 * 32    = 4096;

and the RAM usage is approximately

    temp1 = (32 / 8) + (32 * 2) = 68;
    temp2 = 4096 * 2 = 8192;
    temp3 = 512;
    TOTAL = 68 + 8192 + 512 = 8772;

In this example, as in most situations, increasing the sector size will decrease the RAM usage. If the sector size were 1024-B, only 5188-B would have been needed, but a moderate performance penalty would be paid.