The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

4.5.4 Пример драйвера связи для NOR Flash

4.5.4 Пример драйвера связи для NOR Flash

Предыдущая  Содержание  Следующая V*D*V

Давайте рассмотрим пример платы на основе MIPS с двумя микросхемами флеш-памяти, имеющими адреса, показанные на Рисунке 4.6.

 

Рисунок 4.6 Карта флеш-памяти.

Рисунок 4.6 Карта флеш-памяти.

 

Ниже приведены сведения об использовании этих микросхем флеш-памяти.

 

Первая микросхема флеш-памяти привязана к адресу 0xBFC00000 и имеет размер 4 Мб. Первая микросхема является загрузочной памятью и имеет два региона стирания. Первый регион стирания имеет восемь секторов, каждый из которых имеет размер 8 Кб; эта 64 Кб область используется для хранения загрузчика и параметров конфигурации загрузки. Вторая область стирания имеет секторы размером 64 Кб и полностью используется для хранения файловой системы JFFS2.

Вторая микросхема флеш-памяти привязана к адресу 0xBF000000 и тоже имеет размер 4 Мб. Вторая микросхема содержит только один регион стирания, а все сектора имеют размер 64 Кб. Эта флеш-память полностью используется для хранения файловой системы JFFS2.

 

Требованием к нашему драйверу связи с флеш-памятью является разделение первой флеш-памяти, стартующей с адреса 0xBFC00000, на две части. Первый раздел размером 64 Кб будет загрузочным разделом. Второй раздел будет объединён с флеш-памятью, стартующей с адреса 0xBF000000, для хранения файловой системы JFFS2.

 

Давайте начнём с заголовочных файлов и определений.

 

/* mtd-bsp.c */

#include <linux/config.h>

#include <linux/module.h>

#include <linux/types.h>

#include <linux/kernel.h>

#include <asm/io.h>

#include <linux/mtd/mtd.h>

#include <linux/mtd/map.h>

#include <linux/mtd/cfi.h>

#include <linux/mtd/partitions.h>

#include <linux/mtd/concat.h>

 

#define WINDOW_ADDR_0 0xBFC00000

#define WINDOW_SIZE_0 0x00400000

#define WINDOW_ADDR_1 0xBF000000

#define WINDOW_SIZE_1 0x00400000

 

map_info содержит информацию о начальном адресе (физическом) каждой микросхемы, объёме памяти и размере шины. Они используются процедурами проверки подключения микросхемы.

 

static struct map_info dummy_mips_map[2] = {

 {

  .name      = "DUMMY boot flash",

  .phys      = WINDOW_ADDR_0,

  .size      = WINDOW_SIZE_0,

  .bankwidth = 4,

 },

 {

  .name      = "Dummy non boot flash",

  .phys      = WINDOW_ADDR_1,

  .size      = WINDOW_SIZE_1,

  .bankwidth = 4,

 }

};

 

Следующая структура используется для создания разделов на загрузочной флеш-памяти.

 

static struct mtd_partition boot_flash_partitions [] = {

 {

    .name = "BOOT",

    .offset = 0,

    .size = 0x00010000,

 },

 {

    .name = "JFFS2",

    .offset = 0x00010000,

    .size = 0x003f0000,

 },

};

 

/*

 * Следующая структура содержит указатели mtd_info для

 * разделов, которые будут объединены

 */

static struct mtd_info *concat_partitions[2];

 

/*

 * Следующая структура содержит указатели на структуры mtd_info для

 * каждого из устройств флеш-памяти

 */

static struct mtd_info * mymtd[2], *concat_mtd;

 

Основной функцией является функция init_dummy_mips_mtd_bsp(). Её реализацию можно увидеть в Распечатке 4.6. Функция делает следующее:

 

Проверяет наличие флеш-памяти по адресу 0xBFC00000 и заполняет структуру MTD для этой флеш-памяти в mymtd[0]

Проверяет наличие флеш-памяти по адресу 0xBF000000 и заполняет структуру MTD для этой флеш-памяти в mymtd[1]

Создаёт два раздела на флеш-памяти с начальным адресом 0xBFC00000

Объединяет второй раздел с флеш-памятью, которая стартует с адреса 0xBF000000, а затем создаёт новое устройство с помощью вызова функции add_mtd_device()

 

Завершает всё функция очистки:

 

static void __exit cleanup_dummy_mips_mtd_bsp(void)

{

    mtd_concat_destroy(concat_mtd);

    del_mtd_partitions(mymtd[0]);

    map_destroy(mymtd[0]);

    map_destroy(mymtd[1]);

}

 

module_init (init_dummy_mips_mtd_bsp);

module_exit (cleanup_dummy_mips_mtd_bsp);

MODULE_LICENSE ("GPL");

MODULE_AUTHOR ("Embedded Linux book");

MODULE_DESCRIPTION ("Sample Mapping driver");

 

Предыдущая  Содержание  Следующая