Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Embedded Linux
eeprom spi как файл
titan83
Добавлено 20.04.2020 12:26
0
Сообщение: 1
titan83
3

Пункты: 3141
Регистрация: 16.12.2012
Здравствуйте, уважаемые коллеги.
Есть плата, на ней установлена spi eeprom FM25CL64B.
Лет пять назад я ее настроил в 3.2 линуксе, как raw device /dev/spidevx.y. Все работает в обещм и целом.
Но сейчас возникла необходимость маппить (mmap) в память содержимое этой флэши. А для этого надо уже прописывать ее как конкретное устройство.
Из описания следует, что она совместима с at25.
Поэтому делаю следующее:
1. Конфиг ядра:
CONFIG_EEPROM_AT25=y
2. linux\drivers\misc\eeprom\at25.c
Замена #define EE_MAXADDRLEN 3
на #define EE_MAXADDRLEN 2
По этой ссылке: https://community.cypress.com/thread/41824

Соответственно, вопрос: как это правильно прописать в боард-файле?
Сейчас у меня описание spi выглядит так:
Цитата

struct spi_gpio_platform_data sk_spi_gpio_platform_data={
.sck = AT91_PIN_PD23,
.mosi = AT91_PIN_PD20,
.miso = AT91_PIN_PD22,
.num_chipselect = 1,
};
struct platform_device sk_spi_gpio_device={
.name="spi_gpio",
.id=3,
.dev = {
.platform_data = &sk_spi_gpio_platform_data,},
};
static void __init ek_add_device_spi_gpio(void)
{
platform_device_register(&sk_spi_gpio_device);
}

static struct mcp251x_platform_data mcp251x_info =
{
.oscillator_frequency = 24000000,
.irq_flags = IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
};
static struct spi_board_info ek_spi_devices[] = {
{ /* spidev 0.0 */
.modalias = "spidev",
.chip_select = 0,
.mode = SPI_MODE_0,
.max_speed_hz = 8 * 1000 * 1000,
// .bits_per_word = 8,
.bus_num = 0,
},
{ /* CAN */
.modalias = "mcp2515",
.platform_data = &mcp251x_info,
.mode = SPI_MODE_0,
.chip_select = 2,
.max_speed_hz = 8 * 1000 * 1000,
.bus_num = 0,
.irq = AT91_PIN_PB22,
},
};


Я очень сильно не уверен, но, возможно, будет достаточно замены .modalias = "spidev" на .modalias = "at25"

Но хотелось бы услышать более опытных товарищей.
Спасибо.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 20.04.2020 14:27 Сообщение: 2
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

Я очень сильно не уверен, но, возможно, будет достаточно замены .modalias = "spidev" на .modalias = "at25"


посмотрите для примера тут как раз 64 килобита EEPROM

https://elixir.bootlin.com/linux/v3.2.102/source/arch/arm/mach-davinci/board-dm365-evm.c#L571

https://elixir.bootlin.com/linux/v3.2.102/source/arch/arm/mach-davinci/board-dm365-evm.c#L578
Спуститься к концу Подняться к началу
Персональная информация
titan83
Добавлено 20.04.2020 14:37 Сообщение: 3
titan83
3

Пункты: 3141
Регистрация: 16.12.2012
Цитата
Цитата

Я очень сильно не уверен, но, возможно, будет достаточно замены .modalias = "spidev" на .modalias = "at25"


посмотрите для примера тут как раз 64 килобита EEPROM

https://elixir.bootlin.com/linux/v3.2.102/source/arch/arm/mach-davinci/board-dm365-evm.c#L571

https://elixir.bootlin.com/linux/v3.2.102/source/arch/arm/mach-davinci/board-dm365-evm.c#L578

Спасибо, ссылки полезные, завтра попробую.
Спуститься к концу Подняться к началу
Персональная информация
titan83
Добавлено 28.04.2020 14:58 Сообщение: 4
titan83
3

Пункты: 3141
Регистрация: 16.12.2012
Благодарю за помощь. Все получилось.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux