Easyelectronics.ru

Электроника для всех
Текущее время: 27 апр 2017, 02:22

Часовой пояс: UTC + 5 часов



    • Изготовление печатных плат. Примерные цены: 10 штук 2-слоя 100*100mm 8.21$ или около ~470 рублей
    • Создание принципиальных схем и проектирование печатных плат
    • Симуляция работы на spice моделях
    • Просмотр GERBER файлов

Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: Pioneer MCU need help
СообщениеДобавлено: 19 янв 2015, 18:00 
Свой человек
Аватара пользователя

Зарегистрирован: 29 май 2013, 14:24
Сообщения: 48
добрый день, есть кто знающий помогите пожалуйста.

решил от магнитолы пионер подключить MD привод к МК, имеются сигналы на шлейфе:
BRST (bus reset)
BRXEN (bus reception enable) - включение ведомого
BSRQ (bus service request) - видимо запрос от ведомого на передачу мастеру
BDATA (bus data) - двусторонняя дата
BSCK (synchro)
как я это я понял, это SPI в режиме mode 3 (запись по спаду - прием по нарастающему)
анализировал Saleae Logic - ставил и по нарастающей на BSCK и по спаду - чушь какая то идет
не вижу аналазитором SPI внятного содержимого. не расознает пакеты он двунаправленые.

просвятите кто сталкивался так ли это
и может кусочек кода под AVR у кого есть для работы с подобными устройствами.
если что проц на MD PD5846B, на самой магнитоле проц PE5463A

еще в интеренете наткнулся на вот такую шину (пишут что это подобие RS485)
PBUS is a multi-drop communication bus for microcontrollers.
Each slave node participating in the bus communication can be sent commands and data, and can respond to them with status and data. The device nodes are connected through 3 wires: GND (ground), +5VDC (power) and the PBUS signal.
The bus communicates by half-duplex 2400 bps 8-bit asynchronous serial transmission, using the built-in UART of the microcontrollers.
Each node has a static unique 4-bit address, which is used during communication. The master node has address 0. The maximum number of slaves is 15

буду рад любым советам, кроме как забить и не заниматься ерундой :)
уж больно интересно запустить привод отдельно от магнитолы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 20 янв 2015, 20:55 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 549
Откуда: Киев
У SPI раздельные шины данных. Там скорее что-то своё. Пионер очень не хочет делиться своими данными, сужу по своему опыту.
Чтобы распознать направление передачи данных, я врезал в разрыв низкоомный резистор и на его выводы подключал компаратор. Выход компаратора показывал направление тока в проводнике данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 29 янв 2015, 20:32 
Свой человек
Аватара пользователя

Зарегистрирован: 29 май 2013, 14:24
Сообщения: 48
всем добрый вечер.

сделал снимок экрана на лоджик анализаторе, может у кого появятся какие мысли

канал 01 не подключен никуда - видать наводка просто идет

анализатор SPI пишет какую то чушь


Вложения:
Снимок экрана 2015-01-29 в 20.27.58.png
Снимок экрана 2015-01-29 в 20.27.58.png [ 207.39 Кб | Просмотров: 6939 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 30 янв 2015, 19:20 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 549
Откуда: Киев
Поменяй настройки у анализатора SPI
ENABLE - active low
SPI CLOCK - rise edge
тогда будет лучше. По моему, это передача числа 0x5F


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 29 фев 2016, 16:16 
Только пришел

Зарегистрирован: 29 фев 2016, 01:24
Сообщения: 10
one-szink писал(а):
всем добрый вечер.

сделал снимок экрана на лоджик анализаторе, может у кого появятся какие мысли

канал 01 не подключен никуда - видать наводка просто идет

анализатор SPI пишет какую то чушь


Добрый день.

Получилось что-нибудь сделать с протоколом?
У меня в машине CD-changer общается с магнитолой по P-BUS, в интернетах нарыл по крохам описаниие, но логического анализатора нет, поэтому не знаю с какой стороны подступиться.
Вот что мне прислали:
Цитата:
BCLK Clock. Bidirectional, idle high. Timing 20-30us per bit, 3-8ms between bytes
BDATA Data. Bidirectional, idle high. Data changes at clock negative edge. 8 bit, transmitted LS bit first
BRST Reset. Unidirectional, idle high. Pulled low by head unit for about 0.5s at startup, before any
other bus activity and again when power to head unit is off
BSRQ Service request. Unidirectional, idle high. Asserted at startup by peripherals (CD or tape) needing
attention. Then while a peripheral is playing may be asserted at 0.5 - 1 second intervals. Head
unit does not poll peripherals at startup so if SRQ not asserted will assume none are present.
BRXEN Receivers Enable. Bidirectional, idle high. Pulled low by talker when sending each byte


Можно ли это привязать к atmega-овскому SPI с учетом того, что тут SISO судя по описанию?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 08 мар 2016, 19:10 
Только пришел

Зарегистрирован: 29 фев 2016, 01:24
Сообщения: 10
В общем нашел анализатор, промучился немного с его настройкой и оживлением (спасибо DI HALT-у за статьи).
Результат вполне себе дешифруется SPI анализатором (если игнорировать никуда не подключенный MISO). По-крайней мере я прочитал код ошибки CD-changer-а и знаю что это "off focus detected". Весь обмен данными между ГУ, тюнером, дисплеем и cd-changer-ом легко определяется.
Изображение
Вопрос топикстартера как это реализовать на AVR остается открытым... Я так понимаю простым bit-bang-ом не обойдешься из-за таймингов?
В железяке стоит 4.190 MHz кварц, у меня родилась идея поставить такой на один из таймеров и каждые 100тиков по прерыванию bit-bang-ить. То есть получим искомые 20-30 us.

P.S. Я чайник в AVR-ах и только светодиодами моргал, но говнокодить код писать могу , не судите строго.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 11 мар 2016, 16:39 
Только пришел

Зарегистрирован: 29 фев 2016, 01:24
Сообщения: 10
Посмотрел по схеме, на обоих микрухах есть два вывода BSI и BSO, но они соединены напрямую и далее через резисторы 220+470 Ом и подтяжку к питанию между ними (10к) соединены между собой. То есть защита от конфликта уровней на CS реализована на уровне протокола? так я понимаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 11 мар 2016, 17:06 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2130
SPI тоже может работать в 3-wire режиме, когда MISO и MOSI физически соединены. Экономят провода. Но не все слейвы позволяют такое. Например, nrf24l01, что при чтении, что при записи, как только появляется сигнал на CLK, начинают выплевывать на MISO байт статуса. А бывает, что вполне можно, но надо смотреть тайминги. Например:
Чтение в в стандартном 4-wire режиме(MISO/MOSI раздельные):
Изображение
Тоже самое чтение, но в 3-wire режиме (MISO/MOSI объединены):
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 12 мар 2016, 03:18 
Только пришел

Зарегистрирован: 29 фев 2016, 01:24
Сообщения: 10
Вопрос в том умеет ли atmega16 работать в режиме трехпроводного SPI...
На avrfreaks вычитал совет объединить MISO/MOSI через 10к резистор и кинуть на DATA (SISO). Не хочется bit-bang-ом заниматься...
Пока у меня идея такая:
Становимся slave-ом и слушаем
Как только ловим нужный заголовок (0x06) - читаем полностью сообщение, BRXEN в output, и в ноль, переключаемся в Master и шлем ответ. Как только ответ отправили, обратно в слейв.
В обработчике прерываний SPI игнорим все когда в режиме мастера.

Но сдается мне не взлетит такое =)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 13 мар 2016, 21:32 
Только пришел

Зарегистрирован: 29 фев 2016, 01:24
Сообщения: 10
В общем запилил bit-bang-ом.
На первый же ответ фейкового устройства headunit шлет RESET.
Причину пока не могу понять, тайминги вывел почти как на родном (Период CLK 23us). Логический анализатор счастлив с моих колхозом...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 26 мар 2016, 15:59 
Только пришел

Зарегистрирован: 29 фев 2016, 01:24
Сообщения: 10
Сегодня увидел почти на каждом сбросе пина вот такую штуку:
Изображение
Сначала подумал на глюк анализатора, но ведь на тех пакетах, что шлет HeadUnit такого нет, только на "моих", генерируемых PinBoard-ом.
Что это за дребезг такой и как от него избавиться?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 29 мар 2016, 23:26 
Только пришел

Зарегистрирован: 29 фев 2016, 01:24
Сообщения: 10
Все, я в тупике...
Что на хардварный SPI, что на софтварный (bit bang), MCU шлет лесом RST и все.
Выглядит это так:

2.241046875 2 0x06
2.242443875 3 0x00
2.252494125 4 0x60
2.253158125 5 0x01
2.253822 0x18
2.2637 <== RESET!

В оригинале:

MCU:
2.39547775 2 '6' (0x06)
2.39687475 3 '0' (0x00)

CD:
2.40706825 4 ` (0x60)
2.40772 5 '1' (0x01)
2.408366 6 '24' (0x18)

MCU:
2.449935 7 '6' (0x06)
2.457923 8 '1' (0x01)
2.460383 9 '240' (0xF0)



Что именно не устраивает эту проприетарщину - ума не приложу :(
Единственное, что странно - CD-changer "отпускает" BRXEN (Receiver enabled) через разные промежутки времени для разных пакетов. Похоже что адрес и конец слова он "держит" притянутым к земле в два раза дольше (0.25ms вместо 0.14), пытался сделать такие же задержки у себя - все равно reset...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 01 апр 2016, 10:24 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 549
Откуда: Киев
Вы смотрели направление тока в проводе данных? Вполне может быть ситуация, как в I2C, когда слейв подхватывает шину на момент времени подтверждения приёма или передачи.
Попробуйте подключить компаратор. По крайней мере с шиной Clarion это помогло.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 01 апр 2016, 11:46 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 2591
Если дефект с дребезгом переключения еще не устранен, то - поставьте последовательный резистор на каждый провод (clk/data...). Номинал 22-47 Ом, я бы взял 33-47.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 03 апр 2016, 11:29 
Только пришел

Зарегистрирован: 29 фев 2016, 01:24
Сообщения: 10
SOVA писал(а):
Вы смотрели направление тока в проводе данных? Вполне может быть ситуация, как в I2C, когда слейв подхватывает шину на момент времени подтверждения приёма или передачи.
Попробуйте подключить компаратор. По крайней мере с шиной Clarion это помогло.


Тут разобрался, все почти так, как Вы написали.
Headunit (в данный момент слейв) подхватывает шину на какое-то время, мне это не важно, вроде, поэтому я просто ему не мешаю.
От ресета избавился и даже могу немного пообщаться с майфуном, теперь проблема где-то у меня коде, но так как это, по сути, первая программа на Си, да еще и в эмбедед, то тут я не удивлен :(

UPD разобрался, был дурак, теперь все работает


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 03 апр 2016, 18:32 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 549
Откуда: Киев
И какой протокол получился?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pioneer MCU need help
СообщениеДобавлено: 04 апр 2016, 00:56 
Только пришел

Зарегистрирован: 29 фев 2016, 01:24
Сообщения: 10
SOVA писал(а):
И какой протокол получился?

Трехпроводной SPI , как и предполагали. Но там хитрости с дерганьем RST и SRQ.
Я закоротил MISO и MOSI джампером на PinBoard-е и хардварная SPI в режиме мастера прекрасно отправляет. Слейв пока "колхозный"

Код:
  for (int bit = 0; bit < 8; bit++)
    {
      if (bit_is_set (PINB, BRXEN))
        {
          Led_Error();
          USART_Send_Byte(0x01);
          return 0xBB;
        };
      // wait for falling clock
      wait_low (PINB, BCLK);
      // Master setup

      // wait for clock raising
      wait_high(PINB, BCLK);
     // changed from low to high
      // read bit value
      if (bit_is_set(PINB, BDATA))
        {
          set_bit(byte, bit);
        }
      else
        {
          clr_bit(byte, bit);
        }
 
    }


Хардварный у меня пока не заработал, но я особо и не старался. Принцип работает "не трожь".


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB