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

 
 
> пакетное чтение
spashok2
сообщение Jan 26 2006, 16:46
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 7-02-05
Пользователь №: 2 475



Здраствуйте всем. подскажите с вопросом.
Сделал свое PCI устройство. Оно поддерживает только одиночные передачи.
Имеет некоторое ПЗУ, отображаемое на память.
подскажите пожалуйста, как быть, если чтение с моей памяти ведется пакетно.
У меня при выставлении сигнала TRDY я выставляю одновременно STOP. но все равно данные передаеются некорректно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
-Al-
сообщение Jan 26 2006, 17:19
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(spashok2 @ Jan 26 2006, 19:46) *
Здраствуйте всем. подскажите с вопросом.
Сделал свое PCI устройство. Оно поддерживает только одиночные передачи.
Имеет некоторое ПЗУ, отображаемое на память.
подскажите пожалуйста, как быть, если чтение с моей памяти ведется пакетно.
У меня при выставлении сигнала TRDY я выставляю одновременно STOP. но все равно данные передаеются некорректно.

А кто из вашего устройства пакетами читает??? Сама система (чипсет, в память системы) пакетами читать не умеет, я не встречал ни одного чипсета, который мог бы пакетами читать... (жаль, что такой режим не предусмотрен =()

А вообще по делу:
Вы держите сигнал STOP до отпускания мастером сигнала FRAME?? Вам нужно после первого такта, в котором обнаружите сигнал IRDY активным (естесственно Ваши сигналы TRDY и STOP тоже должны быть активны в данный момент) отпустить TRDY, а STOP отпускать только в случае отсутствия сигнала FRAME, иначе посыпятся ложные фазы данных!
Go to the top of the page
 
+Quote Post
spashok2
сообщение Jan 26 2006, 17:29
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 7-02-05
Пользователь №: 2 475



спасибо, что ответили. Смысл в том, что пакетами мою память читает другое устройство, и это я изменить не могу. =(
С TRDY и IRDY я поступаю так как Вы говорите. А вот STOP отпукаю вместе с TRDY, т.е. не жду frame.
Вопрос такой:если мастер читает пакетно 2 dword. если передать 1 dword данных выставив одновременно с TRDY STOP,то мастер перезапросит данные с адреса 2 dword или опять повторит пакетное чтение с адреса первого dword.
Go to the top of the page
 
+Quote Post
-Al-
сообщение Jan 26 2006, 17:39
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(spashok2 @ Jan 26 2006, 20:29) *
спасибо, что ответили. Смысл в том, что пакетами мою память читает другое устройство, и это я изменить не могу. =(
С TRDY и IRDY я поступаю так как Вы говорите. А вот STOP отпукаю вместе с TRDY, т.е. не жду frame.
Вопрос такой:если мастер читает пакетно 2 dword. если передать 1 dword данных выставив одновременно с TRDY STOP,то мастер перезапросит данные с адреса 2 dword или опять повторит пакетное чтение с адреса первого dword.

Если мастер сделан нормально, то он запросит второе dword.

Выдержка из PCI Specification:
Цитата
В заключение, перечислим следующие общие правила при управлении сигналами FRAME#, IRDY#, TRDY#
и STOP# во всех транзакциях PCI:
1. Всякий раз, когда сигнал STOP# становится активным, FRAME# должен перейти в неактивное состояние
как можно скорее, в соответствии с правилами такого установления (то есть IRDY# должен быть
активным). Сигнал FRAME# должен стать активным после перехода STOP# в неактивное состояние как
можно скорее, предпочтительно за два или три цикла. Целевое устройство должно игнорировать любые
попытки установить связь в интервалах времени между переходом сигнала STOP# в активное состояние, а
сигнала FRAME# - в неактивное но при этом оно должно сохранять активным сигнал STOP#, пока
FRAME# не станет неактивным. Когда мастер обнаружил, что активен STOP#, он должен установить в
неактивное состояние сигнал FRAME# в первом цикле, начиная с которого стал активным IRDY#.
Установка в активное состояние IRDY# (а, следовательно, установка FRAME# в неактивное состояние)
может произойти как следствие нормального поведения сигнала IRDY# мастера (при условии, что
транзакция не была прервана целевым устройством), и может быть задержана нулевым или большим
количеством циклов, в зависимости от того, когда мастер будет готов завершить передачу данных. В
качестве альтернативы, мастер может установить сигнал IRDY# в активное состояние немедленно (даже
без подготовки к завершению передачи данных), при условии, что TRDY# - неактивный, таким образом
показывая, что больше не будет никаких дальнейших передач данных.
2. Будучи установленным, STOP# должен остаться активным до тех пор, пока FRAME# не перейдет в
неактивное состояние, после чего STOP# также должен стать неактивным.
3. В течение заключительной фазы данных транзакции (FRAME# неактивный и IRDY# активен), любой
фронт синхроимпульса, на котором сигналы STOP# и TRDY# переходят в активное состояние, становится
последним циклом транзакции, а сигнал IRDY# становится неактивным по следующему положительному
фронту (таким образом, создается цикл ожидания и определяется конец транзакции).
4. Мастер должен повторить запрос, который был завершен целевым устройством (за исключением
аварийного прекращения работы целевым устройством) по адресам следующих еще не переданных
данных, если он, конечно, предполагает полностью завершить запрос. Если устройство не желает, то
мастер может не повторять запрос.
5. Если целевое устройство установило в активное состояние сигналы TRDY# или STOP#, то оно не должно
изменять DEVSEL#, TRDY# или STOP# до тех пор, пока не завершится текущая фаза данных.
Go to the top of the page
 
+Quote Post
spashok2
сообщение Jan 27 2006, 09:30
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 7-02-05
Пользователь №: 2 475



Спасибо, буду пробовать. Мастер вроде бы сделан нормально smile.gif
Go to the top of the page
 
+Quote Post
spashok2
сообщение Jan 30 2006, 15:45
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 7-02-05
Пользователь №: 2 475



внес изменения в устройство, оно теперь завершет пакетное чтение как сказано в спецификации тип disconnect-A т.е. завепешение транзакции посл передачи 1 dword данных. Но проблема осталась.
Я в DOS читаю память моего устройства с помощью инструкции MOVQ т.е. читаю 8 байт при этом читается 2 раза 1 dword. Т.е. получается, что мастер все время устанавливает адрес 1 dwordа.
Никтом не может подсказать как ведет себя PCI в таком случае?
Буду благодарен за ЛЮБУЮ помошь.
Go to the top of the page
 
+Quote Post
-Al-
сообщение Jan 30 2006, 19:54
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(spashok2 @ Jan 30 2006, 18:45) *
внес изменения в устройство, оно теперь завершет пакетное чтение как сказано в спецификации тип disconnect-A т.е. завепешение транзакции посл передачи 1 dword данных. Но проблема осталась.
Я в DOS читаю память моего устройства с помощью инструкции MOVQ т.е. читаю 8 байт при этом читается 2 раза 1 dword. Т.е. получается, что мастер все время устанавливает адрес 1 dwordа.
Никтом не может подсказать как ведет себя PCI в таком случае?
Буду благодарен за ЛЮБУЮ помошь.

а вот с этого надо было начинать.... это вообще недокументированная возможность.. своего рода баг... и как здесь поведет система - зависит от чипсета, но тем не менее на эту команду вы просто обязаны предоставить все 8 байт...
Go to the top of the page
 
+Quote Post
spashok2
сообщение Jan 31 2006, 10:00
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 7-02-05
Пользователь №: 2 475



Но ведь в спецификации(и в приведенной вами цитате) сказано ,что
" Мастер должен повторить запрос, который был завершен целевым устройством (за исключением
аварийного прекращения работы целевым устройством) по адресам следующих еще не переданных
данных, если он, конечно, предполагает полностью завершить запрос."
Т.е. получается, что чипсет не соответсвует спецификции?
На самом деле я пробовал на разных чипсетах - тот же результат. причем результат стабильный.
У меня есть предположение, может я что -то не так делаю, что мастер опять выставляет адрес первого dwordа.Но я смотрел осциллографом, все соответствует спецификации.
Если я запрещею декодирование адреса в своем устройстве, то эта область памяти читается верно (все 8 байт), а если разрешаю то два раза читается 1 dword кождой пары dword ов.
Go to the top of the page
 
+Quote Post
-Al-
сообщение Feb 1 2006, 17:16
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(spashok2 @ Jan 31 2006, 13:00) *
Но ведь в спецификации(и в приведенной вами цитате) сказано ,что
" Мастер должен повторить запрос, который был завершен целевым устройством (за исключением
аварийного прекращения работы целевым устройством) по адресам следующих еще не переданных
данных, если он, конечно, предполагает полностью завершить запрос."
Т.е. получается, что чипсет не соответсвует спецификции?
На самом деле я пробовал на разных чипсетах - тот же результат. причем результат стабильный.
У меня есть предположение, может я что -то не так делаю, что мастер опять выставляет адрес первого dwordа.Но я смотрел осциллографом, все соответствует спецификации.
Если я запрещею декодирование адреса в своем устройстве, то эта область памяти читается верно (все 8 байт), а если разрешаю то два раза читается 1 dword кождой пары dword ов.

Полагаю, что чипсет начинает читать 1 dword потому, что он не может разделить команду MOVQ на две итерации и при неудачном завершении MOVQ, операция должна повторится еще раз сначала. И к тому-же, как я говорил ранее, команда MOVQ не есть пакетное чтение, а исключение из спецификации.
А зачем Вам в 32-разрядной системе вообще пользоваться 64-разрядными командами??
Go to the top of the page
 
+Quote Post
spashok2
сообщение Feb 2 2006, 09:31
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 7-02-05
Пользователь №: 2 475



Спасибо. за помощь. Я уже разобрался с проблемой. Смысл был в том. что у меня сигнал TRDY# держался 2 такта (моя ошибка).Поэтому мастер на каждый такт считывал по dword , т.е. одни и те же денные, поэтому и не повторял запрос. Сделал TRDY# активным в течении одного такта и все заработало.
Go to the top of the page
 
+Quote Post

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

 


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


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