Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА:

Пожелания для Марсохода4 10 года 6 мес. назад #5523

без SOF устройства обязаны засыпать

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Пожелания для Марсохода4 10 года 6 мес. назад #5529

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

Chaosorg пишет: без SOF устройства обязаны засыпать

Попробовал без SOF - устройство молчит...
И где тут логика - если устройство спит, как SOF поймает?
И какая разница, SOF приходят каждую мс, или другие пакеты (например IN)?
К проекту трекера добавил FSM в виде специализированного софт-процессора, и по трекеру видно, что все зависает на шаге ожидания ответа от устройства.

Кстати, где написано, что без "SOF" устройства обязаны засыпать?
Нашел следующее: состояние шины "IDLE" более 3мс означает неактивность шины, и устройство может переходить в спящий режим. Состояние шины "K" более 20 мс с последующим "EOP" выводит устройство из спящего режима. Режим FS, 12МГц.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Пожелания для Марсохода4 10 года 6 мес. назад #5530

Leka пишет:

Chaosorg пишет: без SOF устройства обязаны засыпать

Попробовал без SOF - устройство молчит...
И где тут логика - если устройство спит, как SOF поймает?
И какая разница, SOF приходят каждую мс, или другие пакеты (например IN)?
К проекту трекера добавил FSM в виде специализированного софт-процессора, и по трекеру видно, что все зависает на шаге ожидания ответа от устройства.

Кстати, где написано, что без "SOF" устройства обязаны засыпать?
Нашел следующее: состояние шины "IDLE" более 3мс означает неактивность шины, и устройство может переходить в спящий режим. Состояние шины "K" более 20 мс с последующим "EOP" выводит устройство из спящего режима. Режим FS, 12МГц.


Да, наверное не очень правильно выразился. Написано, что устройства засыпают при отсутствии активности, и я решил, что естественным кандидатом на "будящий" сигнал является именно SOF. Я так понял, что нет смысла говорить о пробуждающем эффекте других пакетов, если SOF является обязательным время/кадрозадающим пакетом. Сделал такие выводы после того, как где-то читал даже о необходимости планировать прочие пакеты, чтобы не сбить передачу SOF.

P.S.
поддержание в неспящем/рабочем состоянии и пробуждение после сна - разные задачи. я не говорю, что SOF может разбудить, я так понял, что он не даст заснуть.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Chaosorg.

Пожелания для Марсохода4 10 года 6 мес. назад #5531

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Устройство начало откликаться.
Дурацкая ошибка была - забыл поменять назначения пинов после смены разъема, а тк ВЧ прекрасно распространяется "по воздуху", трекер ловил наводки - без ошибок...

Клавиши передаются. Теперь надо анализ пакетов в ПЛИС перенести (сейчас данные трекера на ПК анализируются), и тогда будет беспроводная клавиатура для Марсоходов.

Для нормальной работы достаточно 2-х пакетов "SETUP" - установки адреса и конфигурации, а дальше регулярно опрашивать("IN", без "SOF") с подтверждениями("ACK"). Попробую еще упростить.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Пожелания для Марсохода4 10 года 6 мес. назад #5537

Leka пишет: Устройство начало откликаться.
Дурацкая ошибка была - забыл поменять назначения пинов после смены разъема, а тк ВЧ прекрасно распространяется "по воздуху", трекер ловил наводки - без ошибок...

Клавиши передаются. Теперь надо анализ пакетов в ПЛИС перенести (сейчас данные трекера на ПК анализируются), и тогда будет беспроводная клавиатура для Марсоходов.

Для нормальной работы достаточно 2-х пакетов "SETUP" - установки адреса и конфигурации, а дальше регулярно опрашивать("IN", без "SOF") с подтверждениями("ACK"). Попробую еще упростить.


Здорово! Получается, что не так страшен черт... Жаль, что, наверное, с mass storage так просто не получится, хотя, если отбросить работу через хаб и прочие излишества, то наверное тоже можно ограничиться поддержкой необходимого минимума протоколов?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Chaosorg.

Пожелания для Марсохода4 10 года 6 мес. назад #5538

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
С mass storage потом пожно будет поэкспериментировать. Но тут HS режим нужен, иначе смысла нет.

Кусок из проекта, без трекера. Посылает инициализирующие пакеты (с ожиданием "EOP"), потом в цикле посылает "IN". Это только для экспериментов(с клавиатурой), для рабочего варианта надо все переделать.
reg [31:0] sof0 = {8'h10,8'h00,8'hA5,8'h80}; 
reg [31:0] sof1 = {8'hE8,8'h01,8'hA5,8'h80}; 
reg [31:0] sof2 = {8'hA8,8'h02,8'hA5,8'h80}; 
reg [31:0] sof3 = {8'h50,8'h03,8'hA5,8'h80}; 
reg [31:0] setup1 = {8'h10,8'h00,8'h2D,8'h80}; 
reg [31:0] setup2 = {8'h28,8'h04,8'h2D,8'h80}; 
reg [31:0] in1 = {8'h10,8'h00,8'h69,8'h80}; 
reg [31:0] in2 = {8'h28,8'h04,8'h69,8'h80}; 
reg [31:0] in3 = {8'h01,8'h04,8'h69,8'h80}; 
reg [31:0] in4 = {8'h98,8'h84,8'h69,8'h80}; 
reg [15:0] ack = {8'hD2,8'h80};
reg [95:0] data0 = {8'h94,8'hDD,8'h00,8'h40,8'h00,8'h00,8'h01,8'h00,8'h06,8'h80,8'hC3,8'h80};
reg [95:0] data1 = {8'h70,8'hEB,8'h00,8'h00,8'h00,8'h00,8'h00,8'h04,8'h05,8'h00,8'hC3,8'h80};
reg [95:0] data2 = {8'h25,8'h27,8'h00,8'h00,8'h00,8'h00,8'h00,8'h01,8'h09,8'h00,8'hC3,8'h80};
reg [95:0] sr;
reg [17:0] step;
reg b, out; 
`define sof0  5'd0
`define sof1  5'd17
`define sof2  5'd18
`define sof3  5'd19
`define eop  5'd20
`define ms10  5'd1
`define ms1  5'd2
`define goto 5'd3
`define ack  5'd4
`define se  5'd5
`define pn  5'd6
`define zz  5'd7
`define s1  5'd8
`define s2  5'd9
`define d0  5'd16
`define d1  5'd10
`define d2  5'd11
`define i1  5'd12
`define i2  5'd13
`define i3  5'd14
`define i4  5'd15
//.setup 00 10 .data0 00 05 04 00 00 00 00 00 EB 70 ..ack  .in 00 10  ..data1 00 00  .ack
//.setup 04 28 .data0 00 09 01 00 00 00 00 00 27 25  ..ack  .in 04 28  ..data1 00 00  .ack
//.in 04 01  ..nak  .in 04 01  ..nak  .in 84 98 
`define SZ 60
reg [5:0] pc = `SZ;
reg [`SZ:0][4:0] pm = { 
	`ms10, `se, `pn, 
	`sof0, `se, `pn, `ms1,		
	`sof1, `se, `pn, 
	`s1, `se, `pn, 
	`d1, `se, `pn, 
	`zz, `eop, `pn, 	
	`i1, `se, `pn, 
	`zz, `eop, `pn, 
	`ack, `se, `pn, 
	`s2, `se, `pn, 
	`d2, `se, `pn, 
	`zz, `eop, `pn,
	`sof2, `se, `pn, `ms1,			
	`i2, `se, `pn, 
	`zz, `eop, `pn, 
	`ack, `se, `pn, 
	`i4, `se, `pn, 
	`zz, `eop, `pn,
	`ack, `se, `pn, 
	`ms1,
	`goto	
};

`define cmd  pm[pc]

reg [3:0] cnt12M;
wire clk12M = (cnt12M == 5);
always@(posedge clk)
	if(cnt12M == 9) cnt12M <= 0; 
	else cnt12M <= cnt12M + 1;

reg [7:0] cmdcnt;
always@(posedge clk)if(clk12M)begin
	
	if(out)begin b <= b ^ ~sr[0]; dp <= b ^ ~sr[0]; dn <= ~(b ^ ~sr[0]); sr <= {1'b0, sr[95:1]}; end
	
	if(step != 0) step <= step - 1; 
	else begin
		oe <= 1; out <= 0; 
		pc <= pc - 1; 
		if(`cmd == `goto) begin pc <= pc + 10; end
		if(`cmd == `ms10) begin step <= 120000;  dp <= 0; dn <= 0;  end
		if(`cmd == `ms1) begin step <= 12000;  dp <= 1; dn <= 0; end
		if(`cmd == `se) begin step <= 2; dp <= 0; dn <= 0; end
		if(`cmd == `pn) begin dp <= 1; dn <= 0; b <= 1; end
		if(`cmd == `zz) begin oe <=0; if(!((p == 0)&(n == 0))) pc <= pc; end
		if(`cmd == `eop) begin oe <=0; if((p == 0)&(n == 0)) pc <= pc; end
		if(`cmd == `s1) begin sr <= setup1; step <= 32; out <= 1; end
		if(`cmd == `s2) begin sr <= setup2; step <= 32; out <= 1; end
		if(`cmd == `d0) begin sr <= data0; step <= 96; out <= 1; end
		if(`cmd == `d1) begin sr <= data1; step <= 96; out <= 1; end
		if(`cmd == `d2) begin sr <= data2; step <= 96; out <= 1; end
		if(`cmd == `i1) begin sr <= in1; step <= 32; out <= 1; end
		if(`cmd == `i2) begin sr <= in2; step <= 32; out <= 1; end
		if(`cmd == `i3) begin sr <= in3; step <= 32; out <= 1; end
		if(`cmd == `i4) begin sr <= in4; step <= 32; out <= 1; end
		if(`cmd == `sof0) begin sr <= sof0; step <= 32; out <= 1; end
		if(`cmd == `sof1) begin sr <= sof1; step <= 32; out <= 1; end
		if(`cmd == `sof2) begin sr <= sof2; step <= 32; out <= 1; end
		if(`cmd == `sof3) begin sr <= sof3; step <= 32; out <= 1; end
		if(`cmd == `ack) begin sr <= ack; step <= 16; out <= 1; end	
	end
end
clk - 120MHz.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Пожелания для Марсохода4 10 года 6 мес. назад #5543

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Перенес анализ пакетов в ПЛИС. В usb-клавиатуре данные в неудобном формате передаются, 6 нажатых клавиш (+ специальные). Преобразовал в выдачу кода последней нажатой клавиши, вывожу на led. Работает, ~450 ЛЕ (но это Квартус лишнего набросал, вроде можно уменьшить до ~250 ЛЕ).

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Пожелания для Марсохода4 10 года 6 мес. назад #5544

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
В ~250 ЛЕ сходу утоптать не получилось, но стараться не стал, пока ~400 ЛЕ.
Для тестов код вывожу на LED[7:0]. Проверил коды клавиш по таблице из инета, совпадают (у usb и ps/2 клавиатур разные коды). Соберу в архив, выложу(в "проектах пользователей") исходники под DE0-nano, для Марсоходов надо будет подправить назначения пинов, и параметры PLL (у DE0-nano кварц 50МГц, у Марсоходов 100МГц, в проекте используется 120МГц).

Кстати, по 8 светодиодов у Марсоходов-3, у Марсоходов-2 их меньше - надо будет по-другому делать тестовый вывод.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Пожелания для Марсохода4 10 года 6 мес. назад #5545

Наверное надо выводить "подключение USB клавиатуры" в отдельную тему, может даже в "USB Host" ?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Пожелания для Марсохода4 10 года 6 мес. назад #5547

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
USB-клавиатура теперь в "проектах пользователей". Будет время, попробую беспроводную USB-мышку подключить.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.145 секунд
Работает на Kunena форум