|
|
  |
Linux на AT91RM9200 |
|
|
|
May 16 2006, 09:45
|
Участник

Группа: Свой
Сообщений: 55
Регистрация: 10-07-05
Пользователь №: 6 685

|
Скажите, если закручивать Linux на AT91RM9200, то, в двух словах, как это будет выглядеть? К микроконтроллеру подключается одна flash'ка размером, к примеру, 16 Мб, где сидит образ системы, SDRAM 32 Мб и всё? Памяти достаточно? А если я захочу, чтобы у меня были изменяемые в процессе работы файлы, но образ чтобы при этом оставался нетронутым, то как быть?
Другая часть вопроса. Я себе не очень представляю, как из под Linux, который крутится на AT91RM9200 управлять свободными портами ввода-вывода? Как это программно выглядеть будет (на C)?
Может быть натолкнёте на страницы, где об это рассказывается и показывается?
|
|
|
|
|
May 16 2006, 11:17
|
Местный
  
Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545

|
Чтобы иметь возможность записывать свои файлы, создается отдельный пользовательский раздел, который можно читать и писать. Образ ядра обычно создается на этапе подготовки и потом не меняется в системе (только чтение). Для дрыгания ножками или проверки их состояния можно применить утилиту GPIO c http://www.ipbx.ru/rm9200/Управляется очень просто: ./gpio +PB1 -PB3 => set PB1, clear PB3; ./gpio ?PB2 => return the status of PB2 pin;
|
|
|
|
|
May 16 2006, 11:27
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 14-06-05
Пользователь №: 6 007

|
Для начала можно сюда заглянуть http://www.ucrouter.ru
|
|
|
|
|
May 16 2006, 11:38
|
Участник

Группа: Свой
Сообщений: 55
Регистрация: 10-07-05
Пользователь №: 6 685

|
Цитата(afad @ May 16 2006, 12:17)  Чтобы иметь возможность записывать свои файлы, создается отдельный пользовательский раздел, который можно читать и писать. Образ ядра обычно создается на этапе подготовки и потом не меняется в системе (только чтение). Я правильно понял, что для этого используется одна флешка, просто на ней несколько разделов? Как считаете, 32 Mb SDRAM и 16 Mb Flash достаточно? Цитата(afad @ May 16 2006, 12:17)  Для дрыгания ножками или проверки их состояния можно применить утилиту GPIO c http://www.ipbx.ru/rm9200/Управляется очень просто: ./gpio +PB1 -PB3 => set PB1, clear PB3; ./gpio ?PB2 => return the status of PB2 pin; Ё-моё.. А по-другому мона? Мож исходники есть?update: Там в исходниках gpio дана, поэтому можно по образу и подобию забацать свой класс на C++, спасибо. Просто планируется очень активная работа с портами. Вызывать утилиту для этого - гиблое дело. А может можно использовать для этого параллельно внешнюю шину на которую вешается SDRAM и использовать уже системные вызовы по каким-то адресам?На первом этапе нужно 8+2 портов output, и 8 input. Группу из 8 желательно ставить или читать разом.
Сообщение отредактировал Dimchansky - May 16 2006, 11:45
|
|
|
|
|
May 16 2006, 12:32
|
Местный
  
Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545

|
Цитата Я правильно понял, что для этого используется одна флешка, просто на ней несколько разделов? Как считаете, 32 Mb SDRAM и 16 Mb Flash достаточно? Да, все на одной флэшке. U-boot и весь Linux занимают 4 Mb, следовательно, под пользовательский раздел остается 12 Mb. 32 Mb SDRAM достаточно, но все зависит от конкретной задачи.
|
|
|
|
|
May 16 2006, 13:11
|
Участник

Группа: Свой
Сообщений: 55
Регистрация: 10-07-05
Пользователь №: 6 685

|
Цитата(afad @ May 16 2006, 13:32)  Цитата Я правильно понял, что для этого используется одна флешка, просто на ней несколько разделов? Как считаете, 32 Mb SDRAM и 16 Mb Flash достаточно? Да, все на одной флэшке. U-boot и весь Linux занимают 4 Mb, следовательно, под пользовательский раздел остается 12 Mb. 32 Mb SDRAM достаточно, но все зависит от конкретной задачи. Я бы хотел в дальнейшем попробовать программировать с использованием Qtopia Core, в том числе и GUI можно ихний взять, тогда практически не будет разницы между программой для простого PC и микроконтроллера. Посмотрел их требования, они как раз говорят, что стандарт требований ихнего footprint'а вместе c Linux: 16MB Flash ROM, 32MB RAM. Вот думаю, может флешку побольше брать... Или в случае чего можно перепаять на большую?
|
|
|
|
|
May 16 2006, 14:06
|
Местный
  
Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545

|
Цитата Вот думаю, может флешку побольше брать... Или в случае чего можно перепаять на большую? Если нужно больше 16 Mb выгоднее прикрутить FLASH-карточку - CompactFlash, SD или MMC - 128 Mb=10 у.е., мы пробовали USB-flash, правда в этом случае занимается USB-master. Цитата ...и GUI можно ихний взять... Встречный вопрос: какой контроллер дисплея собираетесь подключать? Для графикии 32 Mb SDRAM может и не хватить. Мое мнение: RM9200 слабоват для графики, но это только мое субъективное мнение, сами не пробовали.
|
|
|
|
|
May 16 2006, 14:12
|
Участник

Группа: Свой
Сообщений: 55
Регистрация: 10-07-05
Пользователь №: 6 685

|
Цитата(afad @ May 16 2006, 15:06)  Цитата ...и GUI можно ихний взять... Встречный вопрос: какой контроллер дисплея собираетесь подключать? Для графикии 32 Mb SDRAM может и не хватить. Мое мнение: RM9200 слабоват для графики, но это только мое субъективное мнение, сами не пробовали. Здесь я описал, что предварительно хотели бы использовать. Может быть подскажете там? У нас графика будет на уровне ввывода текстовых данных, может быть с небольшими рисунками. Т.е. рисований графиков в реальном режиме времени не планируется.
|
|
|
|
|
May 17 2006, 15:30
|
Участник

Группа: Свой
Сообщений: 55
Регистрация: 10-07-05
Пользователь №: 6 685

|
Цитата(afad @ May 16 2006, 13:17)  Для дрыгания ножками или проверки их состояния можно применить утилиту GPIO c http://www.ipbx.ru/rm9200/Управляется очень просто: ./gpio +PB1 -PB3 => set PB1, clear PB3; ./gpio ?PB2 => return the status of PB2 pin; Может быть знаете ответы на такие вопросы: 1. Каким образом на C можно установить/прочесть сразу группу смежных pin'ов? Т.е., например, одним махом записать/прочесть на 7 ног PA15..PA21 значение из unsigned int переменной. 2. Можно ли как-то программно установить направление портов (ввод/вывод)? Как конфигурируются порты из под Linux? 3. Реально ли из под Linux поймать IRQ? Например по ногам PA23,PA25..PA26. Я догадываюсь, что можно закрутить поток на чтение какой-то ноги, но может быть можно более культурно как-то это сделать? 4. Реально ли из под Linux дёргать ногами не с той скоростью, которое будет обеспечено ядром, а хотя бы как-то выдерживая интервалы времени не менее 150ns или 300ns? Можно ли этот интервал как-то менять, в каких масштабах?
|
|
|
|
|
May 18 2006, 12:00
|
Местный
  
Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545

|
Цитата 1. Каким образом на C можно установить/прочесть сразу группу... 2. Можно ли как-то программно установить направление портов (ввод/вывод)?... 3. Реально ли из под Linux поймать IRQ?... Можно все из перечисленного. Читайте DataSheet на AT91RM9200, раздел "Parallel Input/Output Controller (PIO)". На С все делается путем записи и чтения регистров PIO: PIO Enable Register PIO_PER Write-only PIO Disable Register PIO_PDR Write-only PIO Status Register PIO_PSR Read-only PIO Output Enable Register PIO_OER Write-only PIO Output Disable Register PIO_ODR Write-only PIO Output Status Register PIO_OSR Read-only PIO Glitch Input Filter Enable Register PIO_IFER Write-only PIO Glitch Input Filter Disable Register PIO_IFDR Write-only PIO Glitch Input Filter Status Register PIO_IFSR Read-only PIO Set Output Data Register PIO_SODR Write-only PIO Clear Output Data Register PIO_CODR Write-only PIO Output Data Status Register PIO_ODSR Read-only PIO Pin Data Status Register PIO_PDSR Read-only PIO Interrupt Enable Register PIO_IER Write-only PIO Interrupt Disable Register PIO_IDR Write-only PIO Interrupt Mask Register PIO_IMR Read-only PIO Interrupt Status Register PIO_ISR Read-only PIO Multi-driver Enable Register PIO_MDER Write-only PIO Multi-driver Disable Register PIO_MDDR Write-only PIO Multi-driver Status Register PIO_MDSR Read-only PIO Pull-up Disable Register PIO_PUDR Write-only PIO Pull-up Enable Register PIO_PUER Write-only PIO Pad Pull-up Status Register PIO_PUSR Read-only Поскольку регистры 32-разрядные, то возможно чтение или запись сразу до 32 бит. Если использовать утилиту GPIO, то, конечно, все делается медленно, вот пример скрипта, выдает на ножку PB22 сигнал с частотой 1 герц: #!/bin/sh while [ 1 ]; do /usr/bin/gpio +PB22 sleep 1 /usr/bin/gpio -PB22 sleep 1 done Для быстрого управления нужно писать программу на С.
|
|
|
|
|
May 18 2006, 12:46
|
Участник

Группа: Свой
Сообщений: 55
Регистрация: 10-07-05
Пользователь №: 6 685

|
Цитата(afad @ May 18 2006, 14:00)  Цитата 1. Каким образом на C можно установить/прочесть сразу группу... 2. Можно ли как-то программно установить направление портов (ввод/вывод)?... 3. Реально ли из под Linux поймать IRQ?... Можно все из перечисленного. Читайте DataSheet на AT91RM9200, раздел "Parallel Input/Output Controller (PIO)". На С все делается путем записи и чтения регистров PIO: ... Поскольку регистры 32-разрядные, то возможно чтение или запись сразу до 32 бит. Если использовать утилиту GPIO, то, конечно, все делается медленно ... Для быстрого управления нужно писать программу на С. Первые три вопроса я вроде бы как понял, что решение в рамках Linux есть. По крайней мере так мне показалось после изучения кода утилиты GPIO, который Вы привели и после ознакомпления в кодом драйвера Button driver (28/07/2005) (Drive buttons with the GPIO pins to send input events.), в котором, кстати говоря, есть ошибка, связанная с дребезгом клавиатуры. Но я списался с автором, сообщил ему об этом, он выслал мне исправленную версию. Есть от чего скакать. Datasheet я почитаю, но, насколько я понимаю, нельзя обращаться напрямую к портам процессора под Linux'ом, как это пишется в IAR, Keil, RealView, т.е. мы должны использовать функции драйвера \arch\arm\mach-at91rm9200\gpio.c для этого. Или я чего-то недопонимаю? Четвёртый вопрос пока плавающий. Как я понимаю, Linux - не риал-тамовская опреационная система. Есть ли порт RTLinux под AT91RM9200 я не знаю, но в моём случае приёдтся либо холотыми циклами выдерживать паузы (минимальные необходимые), либо сделать какую-то синхронизацию с внешним тактом, буду думать как.
|
|
|
|
|
May 18 2006, 15:44
|
Местный
  
Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545

|
Обращение к регистрам PIO для процессора аналогичны обращениям к ячейкам памяти. Т.е. Вы можете либо использовать утилиты (в том числе свои) или другим доступным способом обращаться к этим регистрам как к ячейкам памяти. Т.е. на физическом уровне управление портами (как и любой другой периферией) доступно, а как Вы сможете реалиовать это программно решайте сами. Цитата Datasheet я почитаю... Не помешает... Также загляните в раздел "Timer counter" -> "Waveform operating mode", возможно Вам подойдет для формирования импульсов. К сожалению не знаю Вашей задачи по формированию импульсов.
|
|
|
|
|
May 18 2006, 18:20
|
Участник

Группа: Свой
Сообщений: 55
Регистрация: 10-07-05
Пользователь №: 6 685

|
Цитата(afad @ May 18 2006, 17:44)  Обращение к регистрам PIO для процессора аналогичны обращениям к ячейкам памяти. Т.е. Вы можете либо использовать утилиты (в том числе свои) или другим доступным способом обращаться к этим регистрам как к ячейкам памяти. Т.е. на физическом уровне управление портами (как и любой другой периферией) доступно, а как Вы сможете реалиовать это программно решайте сами. Вы меня обрадовали. Честно!  Потому как я считал, что в Linux, как в WindowsXP - хочешь работать с портом напрямую, пиши драйвер. Грамотней, конечно, написать драйвер, но на первом этапе проще отладить напрямую. Цитата(afad @ May 18 2006, 17:44)  Также загляните в раздел "Timer counter" -> "Waveform operating mode", возможно Вам подойдет для формирования импульсов. К сожалению не знаю Вашей задачи по формированию импульсов. Одна из простых задач (примитив): На 8 ног устанавливается число (адрес A), на другие восемь ног устанавливается другое число (данные D), потом ногой (назовём её WR), дергаем вниз и вверх. Операция закончена. По временной диаграме выглядит: 0 ns: A,D 150 ns: WR low 300 ns: WR high 450 ns: done и так сначала, если нужно. Здесь времена означают минимальный интервал, можно и больше выдерживать, но это не значит, что по миллисекунде, т.к. таких записей может быть очень много (сотня, вторая тысяч), никто сидеть и ждать не будет.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|