Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: NAND flash & linux
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
R6L-025
Добрый день!
Подскажите - есть плата с SoC ArriaV, на ней стоит NAND флеш. На проце заведен linux. Как из под него общаться с памятью?
В DeviceTree есть следующий код:
Код
hps_nand0: flash@0xff900000 {
            compatible = "denali,denali-nand-dt";
            reg = <0xff900000 0x00010000>,
                <0xffb80000 0x00010000>;
            reg-names = "nand_data", "denali_reg";
            interrupt-parent = <&hps_arm_gic_0>;
            interrupts = <0 144 4>;
            clocks = <&nand_clk>;
            #address-cells = <1>;
            #size-cells = <1>;
            status = "okay";
            bank-width = <2>;
            device-width = <1>;
            nand-bus-width = <8>;

            partition@nand-user {
                label = "NAND_Flash";
                reg = <0x0 0x1000>;
            };

        };

Собственно что я должен увидеть? Новое блочное устройство в /dev/* ? Похожего там ничего не видно. Как вообще правильно работать с этим делом? В документации к ядру нашел только примеры devicetree привязок, а вот что должно получится в итоге...

Спасибо!
krux
обычно, NAND флеш, подключенный напрямую к чипу в linux - это /dev/mtdX
неужели нету?
R6L-025
Цитата(krux @ Jun 3 2017, 15:00) *
обычно, NAND флеш, подключенный напрямую к чипу в linux - это /dev/mtdX
неужели нету?


Спасибо, хоть буду знать как выглядит файл устройства.
Нет, нету
В логах ядра нашел сообщение:
denali-nand-dt: probe of ff900000.flash failed with error -5
осталось понять что это значит, и как его лечить)

Заработало. После того как привел скрипт DT к такому виду:
Код
hps_nand0: flash@0xff900000 {
            #address-cells = <1>;
            #size-cells = <1>;
            compatible = "denali,denali-nand-dt";
            reg = <0xff900000 0x00010000>,
                <0xffb80000 0x00010000>;
            reg-names = "nand_data", "denali_reg";
            interrupt-parent = <&hps_arm_gic_0>;
            interrupts = <0 144 4>;
            dma-mask = <0xffffffff>;
            clocks = <&nand_clk>;
            status = "okay";
            
            //bank-width = <2>;
            //device-width = <1>;
            //nand-bus-width = <8>;

            partition@nand-user {
                label = "NAND_Flash";
                reg = <0x0 0x1000>;
            };

        };
Jury093
Цитата
Спасибо, хоть буду знать как выглядит файл устройства.

у вас nand на hps подключен? раз по линуксу вопрос..
для начала проверьте, что интерфейс разрешен в настройках прелоадера, пины ни с чем не конфликтуют и чип подключен правильно..
Цитата
В логах ядра нашел сообщение:
denali-nand-dt: probe of ff900000.flash failed with error -5
осталось понять что это значит, и как его лечить)

простейший путь, раз вы не в теме, в исходниках ядра найти исходник драйвера для denali-nand (обычно исходники-ядра/drivers/mtd/nand/denali.c)
и перед каждым:
Код
return -ENOMEM;
goto failed_req_irq;

и подобными выходами по ошибке прописать отладочный
Код
printk("я тут\n");

"тут" можно и нужно менять на "там" или просто цифры, тогда вы увидите в каком месте драйвер завершает работу с ошибкой, дальше делаете анализ - чего ему не хватает
не забудьте сделать бекапную копию исходника драйвера и после правки пересобрать и обновить ядро и драйвер
R6L-025
Jury093, спасибо за совет. Модули ядра никогда не собирал, поэтому даже не подумал об этом способе.
Ну а NAND завелась, я топиком выше приложил код DT с которым она заработала. Дело, по видимому, в нем было
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.