Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EP9302, SPI под Linux
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
AVR
Здравствуйте!
Ковыряю Linux на CS-EP9302, использую ядро версии 2.6.17.14
В проце имеется Synchronous Serial Port, который насколько я понял может работать в режиме Motorola SPI, т.е. в обычном старом добром SPI. Но к сожалению не получилось найти где включить при конфигурировании ядра этот SSP, и тем более SPI чтобы его можно было увидеть в качестве стандартного /dev/spi...
Подскажи, пожалуйста, как решить эту проблему?
ЗЫ
Поиском по сайту пользовался, google тоже использовал smile.gif
sensor_ua
В TS-Linux SPI называют ssi. Не знаю, не заграбастан ли он под приватные дрова какой-нибудь SD, но я бы посмотрел /etc/inittab на предмет что там грузится. Потому как оно либо есть как отдельные дрова, либо нет, а если нет, то тогда нужно рыть конфиг и перекомпилировать (ядро/модули).
А линукс-то какой?
AVR
Спасибо за совет, нашел я этот драйвер, ssp.c называется...
Глянул я в него - а там... SPI фактически не реализован!!! А то что есть это полнейшее убожество! DMA там и в помине нет, а вместо этого куча спинлоков и udelay'ев... Что может быть примитивнее SPI, но они не смогли написать нормальный драйвер для этой штуки! =(((
А ещё я узнал что SPI у меня 7.4 МГц - это просто смешно, просто разочарование полнейшее...

Подскажите, пожалуйста, где можно достать НОРМАЛЬНЫЙ стандартный драйвер для SPI под EP9302?..
sensor_ua
Не подскажу. В TS-Linux (всё что под рукой из сорцов) убогость ещё та (хотя, учитывая возможную работу с DMA, вероятно всё не так и плохо). Думаю, стОит поискать пакет, проточенный под работу с SD/MMC через SPI. Я не знаком с написанием дров под линукс, потому чего там и как быть должно пока не в курсе. Хорошая вероятность найти нормальные дрова в Debian (не обязательно в embedded).

PS У Olimex есть линк на патч - посмотри, может там есть чего полезное
http://dev.ivanov.eu/projects/cs-e9302/

Ну и первый линк в гагле по запросу "spi_ep93xx.c"
https://dev.contec.at/dev/micro/micro9/LINU...ep93xx_spi.diff
aaarrr
Цитата(AVR @ Feb 12 2008, 00:17) *
Спасибо за совет, нашел я этот драйвер, ssp.c называется...
Глянул я в него - а там... SPI фактически не реализован!!! А то что есть это полнейшее убожество! DMA там и в помине нет, а вместо этого куча спинлоков и udelay'ев... Что может быть примитивнее SPI, но они не смогли написать нормальный драйвер для этой штуки! =(((
А ещё я узнал что SPI у меня 7.4 МГц - это просто смешно, просто разочарование полнейшее...

Подскажите, пожалуйста, где можно достать НОРМАЛЬНЫЙ стандартный драйвер для SPI под EP9302?..

SPI на EP93xx очень убогий. Могу только посоветовать внимательно просмотреть эту тему (там и про DMA есть) и даташит. По большому счету он годится только для загрузки мелкой конфигурации в какую-нибудь периферию.
AVR
Большое спасибо за Ваши ответы!
Посмотрел ссылку: http://dev.ivanov.eu/projects/cs-e9302/
там вообще драйвер что надо, да ещё и стандартный.
скачал я нужную для этого версию ядра и патч, проделал всё что в этом руководстве, ядро собралось, всё бы замечательно, НО...
не стартует... причем это происходит как с 2.6.20 ядром так и с 2.6.24...
вот что выводит Нажмите для просмотра прикрепленного файла ...
После того как доходит до слов "Uncompressing Linux... done, booting the kernel." больше ничего не выводится после них... подставляю zImage от версий 2.6.8.1 и 2.6.17.14 и всё тут же заводится и работает с теми же параметрами...
sensor_ua
Цитата
проделал всё что в этом руководстве
А свой таргет полностью прибили?

Там чего-то народ об возможных несоответствиях версий бута и идентификатора железки говорил
http://electronix.ru/forum/index.php?showtopic=39785
DmitryV
Цитата(AVR @ Feb 15 2008, 01:21) *
не стартует... причем это происходит как с 2.6.20 ядром так и с 2.6.24...
вот что выводит Нажмите для просмотра прикрепленного файла ...
После того как доходит до слов "Uncompressing Linux... done, booting the kernel." больше ничего не выводится после них... подставляю zImage от версий 2.6.8.1 и 2.6.17.14 и всё тут же заводится и работает с теми же параметрами...

Не исключаете возможность того, что все-таки стартует, но ничего не выводит?
В конфигурации ядра поищите Serial Drivers или что-то в этом духе.
Сам имел такую же проблему с "не запуском", причем с родным циррусовским ядром.
AVR
Цитата(DmitryV @ Feb 16 2008, 01:15) *
Не исключаете возможность того, что все-таки стартует, но ничего не выводит?
В конфигурации ядра поищите Serial Drivers или что-то в этом духе.
Сам имел такую же проблему с "не запуском", причем с родным циррусовским ядром.
Я не только не исключаю, а даже предполагаю это в первую очередь smile.gif
Посмотрел драйвер последовательного порта, там может быть ttyAM, ttyAM0, ttyAM1 и ttyAM2 (это вроде IRDA)... пробовал запускать со всеми вышеперечисленными значениями - никакого результата... при конфигурации убедился что драйвер этих портов активен и поддерживает консоль...

Я использую оргинальный RedBoot, который с платой шел:
RedBoot™ bootstrap and debug environment [ROMRAM]
Non-certified release, version v2_0 - built 08:14:43, Aug 22 2006
Platform: Cirrus Logic EDB9302 Board (ARM920T) Rev A

возможны ли проблемы если он очень старой версии? двухгодичной давности...
новый ставить боязно: тогда уж и ни новый не заработает да и старый запорю и не смогу восстановить... smile.gif

ДОБАВЛЕНО:
Завелось 2.6.20.4 всё с теми же параметрами ядру... Но заработало оно только если собирать его в программусине Crater (переделанной под Cirrus'ы)... Возможно моих навыков хватит чтобы подправить содержимое тех патчей SPI для 2.6.20, но всё же хотелось бы узнать почему не запускается самосборное...
sensor_ua
Цитата
хотелось бы узнать почему не запускается самосборное...

Догадки
1) есть некоторая вероятность того, что лодырь не знает точки входа этих вновь собранных ядер.
2) В конфиге мог забыть чего-то примерно такое
CONFIG_CMDLINE="root=/dev/mtdblock1 console=ttyAM0,115200"
3) в /etc/inittab не попало setserial с каким-то getty, портом и скоростью
AVR
Как мне посоветовали на другом форуме чтобы запустить свежатину надо брать u-boot. Я скачал ELDK для ARM и скачал пропатченый для edb9302 (вроде как совеместимая плата с CS-EP9302) исходник u-boot. Собрал U-boot и на выходе получил u-boot.bin
Как теперь его правильно залить в самое начало флэша чтобы с него грузилось?
1) Попробовал залить средствами самого RedBoot'а, но по всей видимости у меня не получилось и теперь плата не работает smile.gif
2) Как пользоваться Cirrus Download Utility через /dev/ttyS0?
Какой джампер надо переключить чтобы эта утилита заработала (а именно прошила u-boot в самое начало флэша чтобы с него шла загрузка u-boot)? Этого я нигде не нашел в описаниях для своей платы. Тогда можно отталкиваться от названий выводов и уровней на которые надо установить эти выводы...
aaarrr
Цитата(AVR @ Apr 7 2008, 03:47) *
Какой джампер надо переключить чтобы эта утилита заработала

T0 в положение 3.3V. Это нога 84(BOOT0), на схеме почему-то названа TEST0.
AVR
Цитата(aaarrr @ Apr 7 2008, 09:12) *
T0 в положение 3.3V. Это нога 84(BOOT0), на схеме почему-то названа TEST0.
Большое спасибо, помогло smile.gif
ЗЫ Так же хотел бы сказать спасибо за измерение скорости работы портов a14.gif
AVR
Получилось скомпилить и получить образ uImage, который прекрасно загружается с помощью u-boot и доходит до момента подключения файловой системы. Теперь стоит задача догрузить образ файловой системы, НО... при загрузке файла любого размера по tftp на любой адрес всё проходит хорошо, а как только я пытаюсь загрузить второй файл (также любой размер имя адрес) загрузчик виснет и ничего больше не происходит... В чем может быть причина зависания u-boot в самом начале загрузки любого второго по очереди файла?.. Нажмите для просмотра прикрепленного файла
aaarrr
То есть uBoot зависает, даже если два раза загрузить uImage?

А если грузить не по TFTP, а X-modem'ом каким-нибудь?
AVR
Цитата(aaarrr @ Apr 14 2008, 09:43) *
То есть uBoot зависает, даже если два раза загрузить uImage?
А если грузить не по TFTP, а X-modem'ом каким-нибудь?
Да, виснет если даже сам uImage второй раз послать и на тот же или любой другой адрес... У меня в uboot там ещё доступна загрузка по y-modem и по какому-то kermit, я юзаю minicom и уже сто раз отправлял файлы через этот minicom, но u-boot просто не видит что я хочу послать по kermit, а если по y-modem то minicom выдает ошибку даже если никаких файлов ни через что не передавалось до этого... Пробую ещё вариант с NFS, но пока выдает unable to mount, хотя NFS сервер пашет...
AVR
В общем, попробовал я с NFS грузануть... и тоже не работает!!! Где можно раздобыть наипоследнийший u-boot с поддержкой edb9302? Может в новых версиях эти проблемы устранили?
Однако если ядро грузить по tftp (один раз он срабатывает к счастью) а корневую файловую систему через NFS брать то всё прекрасно монтируется и система заводится и работает отлично. Этим я пока ограничусь, но не теряя надежды оживить и все другие возможные способы загрузки системы...
ЗЫ Оффтоп: юзаю nfs-kernel-server и он почему-то очень долго ищется nfs-клиентом... Так же замечал на своем десктопном Linux что на фтп оно заходит очень очень долго, думает о чем-то, хотя на тот же фтп виндовый комп заходит слёту за мгновение... Можно ли ускорить в Linux скорости коннектов?
aaarrr
А если с RedBoot'ом новым попробовать?
AVR
Столкнулся со следующей проблемой... Ядро версии 2.6.24-rc8 прекрасно собирается и работает, однако для него не удается собрать модуль ядра. Для начала я пытаюсь собрать простейший модуль hello world, который содержит всего пару printk и успешно собирается для моего десктопного Linux (debian-40r3-i386). Не поленился и запустил на своей платке ядро 2.6.20.4 и оно хроршо работает и этот же модуль прекрасно собирается и устанавливается. Но для 2.6.24-rc8 выдает тучу непонятных ошибок. Изменился ли как-нибудь процесс сборки модулей ядра для самых последних версий ядра, начиная с 2.6.24?

Чтобы не засорять форум текстами, выкладываю текстовый файл: Нажмите для просмотра прикрепленного файла
В начале успешная сборка для 2.6.20.4, затем то что для 2.6.24, далее скриптик который собирает, в нем я меняю лишь только каталог KDIR с исходниками ядра...
AlChi
Есть вопрос: SPI под каким майором регистрируется? Про i2c знаю, что 89
AVR
У меня PHY KSZ8721BL. Для процессора EP93xx - ядра версии 2.6.24, 2.6.25 и самая свежатина 2.6.27 - отлично собирается, создается uImage, загружается по TFTP, запускается. Но PHY насколько я понимаю не определяется...
Код
Kernel command line: root=/dev/nfs rw ip=192.168.0.20 nfsroot=192.168.0.1:/nfs console=ttyAM,57600
IP-Config: No network devices available.
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
Это регрессия, или надо что-то дополнительное сконфигурировать, чтобы возобновить поддержку KSZ8721BL?
aaarrr
Проверьте, правильно ли выставлена частота MDC (2.5MHz).
AVR
Цитата(aaarrr @ Oct 12 2008, 20:38) *
Проверьте, правильно ли выставлена частота MDC (2.5MHz).
Сори, но где это смотреть?.. Осциллографа нет... Или копать исходники? Но в каком файле? Поиск по папке с 2.6.27 по ключевому слову 8721 не позволил найти файлы, относящиеся к данному типу PHY... Может решили почистить от "ненужных" драйверов? Вроде интерфейс у таких PHY стандартный, однако где смотреть код, относящийся к нему пока не нашел. Но с удовольствием бы покопался и попробовал бы решить проблему...
aaarrr
Копать исходники в сторону \kernel\linux-2.6.2x\drivers\net\arm\ep93xx_eth.c, phy_init().

У них стоит HCLK/8, т.е. 12.5MHz @ 100MHz HCLK.
AVR
Цитата(aaarrr @ Oct 12 2008, 21:20) *
Копать исходники в сторону \kernel\linux-2.6.2x\drivers\net\arm\ep93xx_eth.c, phy_init().
У них стоит HCLK/8, т.е. 12.5MHz @ 100MHz HCLK.

Ядро 2.6.27, этой функции нет, они переделали на новомодную структуру модуля c platform_driver... Она называется static int ep93xx_eth_probe(struct platform_device *pdev)
Код
    ep->mii.phy_id = data->phy_id;
    ep->mii.phy_id_mask = 0x1f;
    ep->mii.reg_num_mask = 0x1f;
    ep->mii.dev = dev;
    ep->mii.mdio_read = ep93xx_mdio_read;
    ep->mii.mdio_write = ep93xx_mdio_write;
    ep->mdc_divisor = 40;    /* Max HCLK 100 MHz, min MDIO clk 2.5 MHz.  */

т.е. на 2.5 МГц они уже исправили (100М/40 = 2.5M)...
Остается непонятной причина неработоспособности... А главное - пути решения...
aaarrr
Тогда это не PHY. А MAC-адрес они там откуда берут?
AVR
Цитата(aaarrr @ Oct 12 2008, 21:37) *
Тогда это не PHY. А MAC-адрес они там откуда берут?
А хз... smile.gif
Я сравнил с кодом рабочего драйвера из 2.6.20 (кстати, сильно отличаются) там есть:
Код
    /*
     * Set MDC clock to be divided by 8 and disable PreambleSuppress bit
     */
    RegWr32(REG_SelfCTL, 0x4e00);

т.е. там как раз 12.5 МГц и работает - попробую исправить и проверить...
aaarrr
Куда исправить - на 12.5MHz? Так не поможет.

Проверьте, что дело вообще доходит до вызова ep93xx_eth_probe.
AVR
Цитата(aaarrr @ Oct 12 2008, 21:51) *
Куда исправить - на 12.5MHz? Так не поможет.
Проверьте, что дело вообще доходит до вызова ep93xx_eth_probe.
Действительно, не помогло... Вставил в probe такое: printk(KERN_EMERG "ep93xx_eth_probe\n");
Это гарантирует что сообщение будет выведено если до него дойдет дело... Проверил лог загрузки... Действительно, ep93xx_eth_probe даже не вызывается!
aaarrr
Тогда ковыряйте конфиги... Да, а что такого хорошего в 2.6.27?
AVR
Цитата(aaarrr @ Oct 12 2008, 22:18) *
Тогда ковыряйте конфиги... Да, а что такого хорошего в 2.6.27?
Что хорошего? Это самое распоследнее ведро smile.gif Как обычно: жить стало лучше, жить стало веселее. Больше устройств, больше драйверов, файловых систем, обновленные интерфейсы (ибо см. stable_api_nonsense.txt smile.gif ) и т.д. ... Сплошной позитив smile.gif
По теме: буду ковырять конфиги - интересно в конечном итоге ездить на новом ведре.

В общем, разобрался... smile.gif
Оказывается, по непонятным причинам, в основной код ядра забыли включить код, в котором описано что плата вообще имеет ethernet порт...
Тут это выложено в виде патча http://linux.derkeiler.com/Mailing-Lists/K...9/msg07002.html
Я не стал мудрить и вручную включил изменения в файл edb9302.c в /linux-2.6.27/arch/arm/mach-ep93xx (приложил) Нажмите для просмотра прикрепленного файла
Работает отлично smile.gif Спасибо за помощь smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.