День добрый, поиском сразу ничего не нашлось, поэтому создам новую тему. Есть задача считать с eeprom I2C 24c04 данные - 512 байт в SRAM ATMega16a, после они будут исковерканы (обработаны ), и сразу вернуть информацию взад. Программа обработки на асме, это легко. Проблема именно в работе с I2C. С утра уже колупаю интернет, набрал даташитов, мануалов и прочих радостей, голова пухнет
Так вот, может есть у кого рабочие процедуры, чтоб их можно было использовать именно для считывания прошивки и ее записи?
Duhas, да, даташит и на мегу и на память само собой взял. Но как и любой чайник, мечтаю получить готовое решение (процедура на ассемблере "прочитать еепром в эту область памяти" и "записать вот отсюда в еепром"), которое без особых проблем работало бы на атмеге. Имея это, намного проще понять как работает протокол и2с вообще и конкретно с такой памятью (24с04). Больше всего настораживает при попытке сделать с нуля предупреждение во всех руководствах что хотя протокол и асинхронный, но надо очень внимательно выдерживать тайминги.
Если ограничишся 256байтами то В "исходниках" библиотека для работы с 24с02 на С в КВ. Для больших размеров адрсация другая и она не подойдет, и прийдется исправлять. Кажется в аппноутах на атмел.ком есть работа с памятью на асэме и С.
Конкретно сам проткол я расписал тут: http://easyelectronics.ru/interface-bus-iic-i2c.html с картинками графиками и прочим. Скоро наверное выложу статью с готовым кодом. Если хочешь, могу замылить тебе готовый проект работы с часами реального времени на i2c, с памятью точно также. Чиркани мне в мыльник я тебе запну проект (dihalt()dihalt.ru) Правда там сделано тупо в лоб - на ожиданиях флага. Мне этот подход категорически не нравится (противоречит архитектуре моей кооперативной ОС которую я постепенно дотачиваю) поэтому я разрабатываю либу для полной аппаратной обработки ииц протокола на конечном автомате, но пока нет доступа к нормальному компу.
Взял в итоге пример для работы с и2ц с этого сайта для 24с01 (если правильно помню), переработал все процедуры с С на асм (вроде без ошибок). Сейчас отлаживаю тестовую запись в 24с04. Имеем: действие старт проходит, получаем АСК, отправляем адрес, получаем АСК, отправляем данные, получаем АСК, все хорошо, но в память ничего не пишется.
симуляция в протеусе 7.5 SP3 программа пишется в AVR Studio 4.16
galex1981 писал(а):А дебаггером AVR студии не пробовал проверять? Проверь, если не получится, я дома вечером проверю
В аврстудио код сам рабочий, на симуляцию сигналов TWCR реагирует адекватно, я дебаггером дальше в протеусе работаю, чтобы понять правильно ли код посылает и понимает сигналы (и посылает ли он и интерпритирует правильные сигналы). Получаю что процедура тестовой записи пары байтов отрабатывает (везде есть контроль приема АСК, и если что переход по ошибке), но содержимое виртуальной 24с04 не меняется.
Значит что то не правильно, если содержимое не меняется. Попробуй все таки еще и в AVR - дебаггером проверить, я понимаю что долго но он 100% верные результаты выдает (не доверяю я Протеусу)