реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Linux на AT91RM9200
Dimchansky
сообщение May 16 2006, 09:45
Сообщение #1


Участник
*

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



Скажите, если закручивать Linux на AT91RM9200, то, в двух словах, как это будет выглядеть?
К микроконтроллеру подключается одна flash'ка размером, к примеру, 16 Мб, где сидит образ системы, SDRAM 32 Мб и всё? Памяти достаточно?
А если я захочу, чтобы у меня были изменяемые в процессе работы файлы, но образ чтобы при этом оставался нетронутым, то как быть?

Другая часть вопроса. Я себе не очень представляю, как из под Linux, который крутится на AT91RM9200 управлять свободными портами ввода-вывода? Как это программно выглядеть будет (на C)?

Может быть натолкнёте на страницы, где об это рассказывается и показывается?
Go to the top of the page
 
+Quote Post
afad
сообщение May 16 2006, 11:17
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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;
Go to the top of the page
 
+Quote Post
Lelick
сообщение May 16 2006, 11:27
Сообщение #3


Участник
*

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



Для начала можно сюда заглянуть http://www.ucrouter.ru
Go to the top of the page
 
+Quote Post
Dimchansky
сообщение May 16 2006, 11:38
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
afad
сообщение May 16 2006, 12:32
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545



Цитата
Я правильно понял, что для этого используется одна флешка, просто на ней несколько разделов?
Как считаете, 32 Mb SDRAM и 16 Mb Flash достаточно?

Да, все на одной флэшке. U-boot и весь Linux занимают 4 Mb, следовательно, под пользовательский раздел остается 12 Mb. 32 Mb SDRAM достаточно, но все зависит от конкретной задачи.
Go to the top of the page
 
+Quote Post
Dimchansky
сообщение May 16 2006, 13:11
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 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.
Вот думаю, может флешку побольше брать... Или в случае чего можно перепаять на большую?
Go to the top of the page
 
+Quote Post
afad
сообщение May 16 2006, 14:06
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545



Цитата
Вот думаю, может флешку побольше брать... Или в случае чего можно перепаять на большую?

Если нужно больше 16 Mb выгоднее прикрутить FLASH-карточку - CompactFlash, SD или MMC - 128 Mb=10 у.е., мы пробовали USB-flash, правда в этом случае занимается USB-master.
Цитата
...и GUI можно ихний взять...

Встречный вопрос: какой контроллер дисплея собираетесь подключать? Для графикии 32 Mb SDRAM может и не хватить. Мое мнение: RM9200 слабоват для графики, но это только мое субъективное мнение, сами не пробовали.
Go to the top of the page
 
+Quote Post
Dimchansky
сообщение May 16 2006, 14:12
Сообщение #8


Участник
*

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



Цитата(afad @ May 16 2006, 15:06) *
Цитата
...и GUI можно ихний взять...

Встречный вопрос: какой контроллер дисплея собираетесь подключать? Для графикии 32 Mb SDRAM может и не хватить. Мое мнение: RM9200 слабоват для графики, но это только мое субъективное мнение, сами не пробовали.


Здесь я описал, что предварительно хотели бы использовать. Может быть подскажете там?
У нас графика будет на уровне ввывода текстовых данных, может быть с небольшими рисунками.
Т.е. рисований графиков в реальном режиме времени не планируется.
Go to the top of the page
 
+Quote Post
Dimchansky
сообщение May 17 2006, 15:30
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 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? Можно ли этот интервал как-то менять, в
каких масштабах?
Go to the top of the page
 
+Quote Post
afad
сообщение May 18 2006, 12:00
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 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

Для быстрого управления нужно писать программу на С.
Go to the top of the page
 
+Quote Post
Dimchansky
сообщение May 18 2006, 12:46
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 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 я не знаю, но в моём случае приёдтся либо холотыми циклами выдерживать паузы (минимальные необходимые), либо сделать какую-то синхронизацию с внешним тактом, буду думать как.
Go to the top of the page
 
+Quote Post
afad
сообщение May 18 2006, 15:44
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545



Обращение к регистрам PIO для процессора аналогичны обращениям к ячейкам памяти. Т.е. Вы можете либо использовать утилиты (в том числе свои) или другим доступным способом обращаться к этим регистрам как к ячейкам памяти. Т.е. на физическом уровне управление портами (как и любой другой периферией) доступно, а как Вы сможете реалиовать это программно решайте сами.
Цитата
Datasheet я почитаю...
Не помешает...
Также загляните в раздел "Timer counter" -> "Waveform operating mode", возможно Вам подойдет для формирования импульсов. К сожалению не знаю Вашей задачи по формированию импульсов.
Go to the top of the page
 
+Quote Post
Dimchansky
сообщение May 18 2006, 18:20
Сообщение #13


Участник
*

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



Цитата(afad @ May 18 2006, 17:44) *
Обращение к регистрам PIO для процессора аналогичны обращениям к ячейкам памяти. Т.е. Вы можете либо использовать утилиты (в том числе свои) или другим доступным способом обращаться к этим регистрам как к ячейкам памяти. Т.е. на физическом уровне управление портами (как и любой другой периферией) доступно, а как Вы сможете реалиовать это программно решайте сами.
Вы меня обрадовали. Честно! smile.gif
Потому как я считал, что в 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
и так сначала, если нужно.
Здесь времена означают минимальный интервал, можно и больше выдерживать, но это не значит, что по миллисекунде, т.к. таких записей может быть очень много (сотня, вторая тысяч), никто сидеть и ждать не будет.
Go to the top of the page
 
+Quote Post
doomer#gp
сообщение May 23 2006, 11:37
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 382
Регистрация: 10-03-05
Из: USA
Пользователь №: 3 234



Dimchansky Linux, а также всякие порты типа RTLinux не являются real-time. Эта тема очень сильно обсуждалась на форуме www.linux.org.ru. примерно год назад.
Из real-time : qnx, VxWorks ИМХО, но они коммерческие.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 22:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01464 секунд с 7
ELECTRONIX ©2004-2016