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

 
 
> I2C в AVR
777777
сообщение May 27 2010, 05:54
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Имеется система состоящая из Master receiver и Slave transmitter. Есл исходить из стандарта I2C, т количество передаваемых байт определяется мастером: при получении последнего байта он ставит NOT ACK, а передатчик получив его останавливает передачу. Мне же нужно чтобы количество передаваемых байт определялось передатчиком. С одной стороны, у него нет средств чтобы по своей инициативе остановить передачу - такты выдаются мастером. Но в описании Status Codes for Slave Transmitter Mode написано, что ведомый с передачей последнего байта может не установить TWEA и это будет означать, что передается последний байт. И есть status code 0xC8 означающий, что "Last data byte in TWDR has been transmitted (TWEA = “0”); ACK has been received". Так значит он может каким-то образом остановить передачу по своей инициативе? И как это происходит аппаратно, т.е. что выдается на шину?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ILYAUL
сообщение May 31 2010, 06:48
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
Но сейчас висит на основном процессоре десяток слейвов и уже прото неприлично выглядит выдача команд а потом опрос по кругу -- кто же готов, чтобы из него вынуть информацию и пнуть дальше. Шина постоянно занята тупым опросом.

Какая-то ситуация не совсем логичная для I2C. Не понимаю , что мешает слейву , который готов отдать данные , назначить cебя мастером , захватить шину и передать данные. Пусть у Вас все будут слейвами , до тех пор пока они не готовы выдать информацию для остальных или основному процессору. Любое устройство ,с "мозгами", может быть мастером и слейвом и в зависимости от Вашей программы может работать в этих двух режимах.
А если Ваш слейв , от которого требует мастер данные , просто не готов их ему дать laughing.gif , занят он чем то другим? Причём может быть более важным maniac.gif , чем общение с мастером. Мастер при этом вместо того что бы выполнять свою работу тупо ждёт получение данных от этого слейва smile3046.gif , когда , например, остальные уже готовы дать ему информацию и продолжить свою работу.

Цитата
А так -- нет никаих проблем в формате данных в пакетах с комадой "дай" завести поля "вот-это" и "вон-тому", причём "вон-тому" может и не совпадать с адресом того, кто выдал саму команду

Вы посчитайте этот формат. И при этом посчитайте , что слейв должен отличать на шине команду ("дай" "вот-это" и "вон-тому" ) от просто данных , которые ему может посылать мастер. Поэтому нужен ещё и префикс , что идёт команда , а не данные. А в диапазоне 8 бит , очень сложно ( а практически невозможно) найти свободное число для префикса команды, т.к. любое число в одном байте можно интерпретировать как данные и как команду. Поэтому потребуется не один байт , а несколько , которые слейв "сложит" в понимание , что получает команду. И тут время опять удлиняется, слейв должен "расшифровать" , что он получает.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 31 2010, 21:33
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(ILYAUL @ May 31 2010, 09:48) *
Какая-то ситуация не совсем логичная для I2C. Не понимаю , что мешает слейву , который готов отдать данные , назначить cебя мастером , захватить шину и передать данные.
...
Вы посчитайте этот формат. И при этом посчитайте , что слейв должен отличать на шине команду ("дай" "вот-это" и "вон-тому" ) от просто данных , которые ему может посылать мастер.
"Какое-то не совсем логичное" с Вами общение. Когда я говорю, что при наличии информации "бывший слейв" должен переключиться в мастера и передать, шина должна быть по сути write-only -- Вы мне объясняете, что тут возникают нюансы с форматами, что-то от чего-то отличать надо, разбираться с тем, кому и что передавать (так вроде бы я говорил, что это не нужно - у меня и сейчас слейвы принимают десяток команд с разными данными для них и пяток команд на формирование данных от них).
А когда я говорю, что то, что сделано сейчас (полчилось в результате развития простой системы) мне надоело и я это собираюсь передалать на мультимастер -- вы пропускаете, что я собираюсь это делать и начинаете мне рассказывать, что слейв должен переключиться в мастера -- т.е. то, с чего я и начал в этой теме.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jun 1 2010, 08:05
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(ReAl @ Jun 1 2010, 01:33) *
"Какое-то не совсем логичное" с Вами общение....
А сейчас есть только то, к чему я склоняюсь в последнее время -- сделать всех "с мозгами" мастерами, превратить для них шину во write-only.

Да, нет . Именно это мы и обсуждаем. Может не совсем понимаем друг друга. Я например не могу понять Вашу идею - мультимастер (всех "с мозгами" мастерами), какой от этого существенный выигрыш? Вот , какие Вы видите (+) от такой организации шины?
Поэтому и придерживаюсь , той точки зрения , что все слейвы и только при необходимости они становиться мастерами.
Вот Вы пишите:
Цитата
Кстати, в заменителе системы с одним мастером _не_нужно_ выяснять -- кому же понадобились данные. Они понадобились "бывшему единственному мастеру" и его адрес может быть жёстко выделен на этапе проектирования системы. У меня при переделке так и будет -- пульт реально один.

Т.е всё таки все данные собранные слейвами/мастерами в итоге предназначены только одному мастеру?

P.S И уточните , плиз, у Вас программная или аппаратная реализация, тогда и по форматам вопросов не будет.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 1 2010, 09:07
Сообщение #5


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(ILYAUL @ Jun 1 2010, 11:05) *
Я например не могу понять Вашу идею - мультимастер (всех "с мозгами" мастерами), какой от этого существенный выигрыш? Вот , какие Вы видите (+) от такой организации шины?
Поэтому и придерживаюсь , той точки зрения , что все слейвы и только при необходимости они становиться мастерами.
Ну да. Если на шине несколько точек "при необходимости становятся мастерами" - то мастеров уже несколько. Если повезёт - в разные моменты времени, если нет -- два "бывших слейва" (в смысле "бывших исключительно слейва") могут достаточно одновремённо перейти в состояние "готовы данные" и полезть на шину мастерами или "бывший единственный мастер" может кому-то что-то захотеть сказать тогда, когда кто-то (в том числе и тот, кому мастер решил сказать) оказался готов передавать данные. И всё, имеем полное использование мультимастерного режима I2C с невозможностью доступа к шине, так как она в данный момент занята либо одновремённый выход на шину и арбитраж.

Поэтому и не могу понять, как это -- "не мультимастер, а все слейвы и только при необходимости они становиться мастерами".
Реализовывать поверх I2C передачу маркера с гарантированно единственным мастером на шине в каждой фазе функицонирования системы, как это делают иногда на RS485 и тем уйти от возможных конфликтов на шине? А зачем, если есть нормальный I2C-шный режим мультимастера?

В пульт (в любого, кто раньше был "мастером-читателем") добавляется режим слейва для приёма затребованных данных, в слейвов добавляется режим мастера для передачи этих дынных. С точки зрения обработчика контроллера I2C (TWI) они становятя одинаковые, слейвы получают право подать голос. По логике работы системы они всё равно остаются подчинёнными устройствами.
Никто не мешает при этом на шине иметь "чистых слейвов" вида RTC, EEPROM, к которым все, кому это нужно, обращаются в классическом режиме. А всё своё (== "всё с мозгами") переделать.

Цитата(ILYAUL @ Jun 1 2010, 11:05) *
Т.е всё таки все данные собранные слейвами/мастерами в итоге предназначены только одному мастеру?
И у меня, и, как я понимаю, у автора темы - именно так. Мастер один. Собственно, весь мой разговор - о переделке системы с одним мастером в систему с несколькими мастерами (мультимастер) для ухода от постоянного опроса готовности и инициативной передачи затребованных ранее данных.

Цитата(ILYAUL @ Jun 1 2010, 11:05) *
P.S И уточните , плиз, у Вас программная или аппаратная реализация, тогда и по форматам вопросов не будет.
Если я в принципе могу переделать хотя бы часть "бывших слейвов" в мастера -- то какая разница, переделаю я ASM, C или verilog (до asic-ов не дорос)? Часы и 24с64 не могу, "бывший единственны мастер" будет к ним обращаться как и раньше, а дюжина mega48 будут переделаны, как и пульт на mega328.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 777777   I2C в AVR   May 27 2010, 05:54
- - rezident   Цитата(777777 @ May 27 2010, 11:54) Так з...   May 27 2010, 17:16
|- - 777777   Цитата(rezident @ May 27 2010, 21:16) Ост...   May 28 2010, 05:10
|- - Kane   Попробуйте ввести "команду", по которой ...   May 28 2010, 06:48
||- - Сергей Борщ   Цитата(Kane @ May 28 2010, 09:48) Мастер ...   May 28 2010, 09:02
|- - rezident   Цитата(777777 @ May 28 2010, 11:10) NAK в...   May 28 2010, 14:31
|- - ReAl   Цитата(777777 @ May 28 2010, 08:10) А мне...   May 29 2010, 20:53
|- - 777777   Цитата(ReAl @ May 30 2010, 00:53) Почему ...   May 30 2010, 04:33
|- - ReAl   Цитата(777777 @ May 30 2010, 07:33) Да, я...   May 30 2010, 19:04
- - ILYAUL   Ваш slave работает в режиме "Ведомый передатч...   May 28 2010, 21:32
|- - 777777   Как мило, оказывается модераторы перенесли тему в ...   May 29 2010, 04:40
- - ILYAUL   ЦитатаА вдруг FF будет среди байтов данных? Я дума...   May 29 2010, 16:46
- - ILYAUL   ЦитатаНужно "нынешнему мастеру" что-то -...   May 29 2010, 21:47
- - rezident   777777, почитайте спецификацию ACCESS.bus. Может ч...   May 30 2010, 19:08
|- - rezident   Цитата(ILYAUL @ May 31 2010, 12:48) Поэто...   May 31 2010, 15:30
- - defunct   ReAl: А Вы учитываете, что в Multimaster придется...   Jun 2 2010, 20:33
- - ASDFG123   Подскажите по I2C интерфейсу в атмега 16, Нужно ...   Jun 22 2013, 17:48
- - IF_P   Цитата(ASDFG123 @ Jun 22 2013, 20:48) Под...   Jul 9 2013, 09:58


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

 


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


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