smartmedia block driver
Charles Manning
manningc2 at actrix.gen.nz
Wed Nov 19 15:28:33 EST 2003
On Wednesday 19 November 2003 23:18, you wrote:
> Hi all,
> I've successfully completed the "read" part of a smartmedia driver for the
> Samsung board smdk2410.
> The Linux kernel is 2.4.18 (mandatory for this board)
> The driver is composed by 3 modules:
> s3c2410nand.o
> smdk2410.o
> mtdblock.o
>
> I've modified these sources in order to read the smartmedia and build up
> the logical to physical block address map.
> Now I am able to mount a vfat filesystem on the smartmedia:
> mount -t vfat /dev/mtdblock0 /mnt/smartmedia
Great progress!
> My problem is that I have no idea about how to write sectors to smartmedia.
> I have already the low level function nand_write_ecc, but I need help from
> the logical side.
> When the mtdblock needs a logical sector (req->sector), I just use my table
> to translate the logical block address to physical block address (the low
> level driver module s3c2410nand.o reads only physical sectors) and pass
> this physical address to the nand_read_ecc function.
> I suppose that when I write, a new logical or physical address must be
> written in the OOB area of the requested block, but which is the logic?
The idea is that you have some spare, unmapped physical blocks in the 'spare
pool'. This pool is typically around 2% of the blocks. ie. if your device has
2048 blocks, then 2000 are logically mapped (ie. formatted and in use) and 48
are in the pool.
When you rewrite a logical block you pick a physical block from the pool and
write to that. If the write fails, mark the block bad and pick another.
Then erase the old block and toss it back in the pool. Oh, if the erase fails
then mark it bad too.
This policy effects a degree of wear levelling as well as providing the
mechanism for handling back-ups for bad blocks.
This is explained a bit in the docs on the Samsung www. THe SDDR09 driver
should be doing stuff like this too.
>
> is anybody able to help me?
>
> regards
>
> Luca
>
>
>
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/
More information about the linux-mtd
mailing list