d7d1cd 0 26 июля, 2012 Опубликовано 26 июля, 2012 (изменено) · Жалоба Привет всем! У меня в устройстве микроконтроллер MSP430F149, к которому подключены 3 микросхемы памяти (для четвертой есть место, но она сама отсутствует). Схему подключения привожу ниже. Моя задача написать функцию чтения\записи одного байта информации из любой микросхемы по любому адресу. Основная проблема в том, что функцию надо написать на ассемблере. Думаю, что подобную функцию, написанную на С, перевести на ассемблер проблем не составит. Подскажите, пожалуйста, с чего мне начать? Изменено 26 июля, 2012 пользователем d7d1cd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ut1wpr 0 26 июля, 2012 Опубликовано 26 июля, 2012 · Жалоба Привет всем! У меня в устройстве микроконтроллер MSP430F149, к которому подключены 3 микросхемы памяти (для четвертой есть место, но она сама отсутствует). Схему подключения привожу ниже. Моя задача написать функцию чтения\записи одного байта информации из любой микросхемы по любому адресу. Основная проблема в том, что функцию надо написать на ассемблере. Думаю, что подобную функцию, написанную на С, перевести на ассемблер проблем не составит. Подскажите, пожалуйста, с чего мне начать? 1. С чтения ДШ на память XX-YY-zzz. 2. Чтение ДШ на МК MSP430F149. 3. Чтение описания протокола I2C. 4. После изучения (а не только прочтения) пп 2 и 3 реализовать протокол. п.4 можно заменить рытьем и нытьем на форумах. Смотря какая цель преследуется. Если сдать курсак назавтра и забыть, вариант выпросить-упросить написать наиболее предпочтителен. Тут уж не до самолюбия. А если действительно научится - тут уж никуда не денешься. Все три пункта по порядку... :) PS Не совсем понятно по тексту поста, для кого перевод с Си на АСМ не составит проблем? Для топикстартера? Или это не вопрос а утверждение? Знака вопроса нет, значит ТС это утверждает. Так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 26 июля, 2012 Опубликовано 26 июля, 2012 · Жалоба Я конечно понимаю, что вы ошиблись, но 3 пункт здесь вообще не к месту. Изучаем протокол SPI. Это первое. Второе - это то, что мне надо именно научиться. Третье: да, я утверждаю, что перевод с С на АСМ - не проблема (по крайней мере это намного проще, чем перевести с АСМ на С). На счет "рытья и нытья на форумах": скажите, а зачем же еще нужны форумы? Вы предлагаете тупо сидеть, читать ДШ, экспериментировать раз за разом и ни у кого ничего не спрашивать? Ладно, все это не по теме. Я почитал описание протокола SPI. Понял как выбрать микросхему, с которой работать. Понял принцип отправки\получения данных. Не понятно как задать адрес, с которого производить чтение\запись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 26 июля, 2012 Опубликовано 26 июля, 2012 · Жалоба перевод с С на АСМ - не проблема Может это и не проблеиа, но наверняка напрасный труд. Зачем перевод нужен? Не понятно как задать адрес, с которого производить чтение\запись. Для того чтобы ответить на этот вопрос нужно знать тип микросхемы памяти и посмотреть соответствующую команды в ДШ. Или угадать прикажете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 26 июля, 2012 Опубликовано 26 июля, 2012 (изменено) · Жалоба Чтобы труд не был напрасным, буду сразу писать на АСМ. Можно я не буду говорить зачем мне такой геморрой? Микросхема памяти, используемая в устройстве - FM25CL64. И еще вопрос: при указанном подключении, можно ли использовать для чтения\записи какую-то периферию микроконтроллера? Я, по крайней мере, такой не нашел. Может все из-за неопытности... Изменено 26 июля, 2012 пользователем d7d1cd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 26 июля, 2012 Опубликовано 26 июля, 2012 · Жалоба Чтобы труд не был напрасным, буду сразу писать на АСМ. Можно я не буду говорить зачем мне такой геморрой? Геморой - дело добровольное. Да и место Сизифа всегда вакантно. Микросхема памяти, используемая в устройстве - FM25CL64. А что не ясно то? Чтение CS=0 SendByte(0x03) SendByte(addr/256) - посылка старшего байта адреса SendByte(255) - посылка младшего байта адреса ReadByte() сколько нужно раз CS=1 И еще вопрос: при указанном подключении, можно ли использовать для чтения\записи какую-то периферию микроконтроллера? Обычно для чтения\записи по SPI-интерфейсу используется SPI-периферия МК. Или это может быть USART в spi-режиме. Или программная эмуляция spi. Смотрите в ДШ на МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 26 июля, 2012 Опубликовано 26 июля, 2012 · Жалоба Микросхема памяти, используемая в устройстве - FM25CL64. И еще вопрос: при указанном подключении, можно ли использовать для чтения\записи какую-то периферию микроконтроллера? При указанном подключении - нет. Для использования аппаратных возможностей MSP430, м/с SPI должны быть подключены к пинам МК, на которые выведены функции USART0 или USART1. USART нужно настроить для использования в режиме SPI. Подключение следующее FM25CL64 --- MSP430F149IPW ======================= CS --- любой пин GPIO SO --- SOMIx WP --- любой пин GPIO SI --- SIMOx SCL --- UCLKx HOLD --- любой пин GPIO или подключить к VCC, как в вашей схеме Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 27 июля, 2012 Опубликовано 27 июля, 2012 · Жалоба К сожалению, схему подключения переделать нельзя. Придется "общаться" с микросхемами при существующем подключении, и реализовывать весь алгоритм "общения" "ручками". Что называется - программно реализовывать. Буду изучать ДШ микросхем памяти пока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 27 июля, 2012 Опубликовано 27 июля, 2012 (изменено) · Жалоба Поизучал ДШ. Возник вопрос по режимам SPI. Сказано, что микросхема FM25CL64 поддерживает 2 режима: 0 и 3. А как выбрать тот или иной режим? Или я что-то недопонимаю? И еще: выборка и установка данных обязательно должна происходить только во время смены одного уровня сигнала тактирования на другой или можно сменить уровень сигнала тактирования, сделать выборку (или установку) данных, снова сменить уровень сигнала, снова сделать выборку (установку) данных... Изменено 27 июля, 2012 пользователем d7d1cd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 27 июля, 2012 Опубликовано 27 июля, 2012 · Жалоба Возник вопрос по режимам SPI. Сказано, что микросхема FM25CL64 поддерживает 2 режима: 0 и 3. А как выбрать тот или иной режим? Выбрать волевым решением. Какой это будет режим 0 или 3, FM25 сам разберёт. И еще: выборка и установка данных обязательно должна происходить только во время смены одного уровня сигнала тактирования на другой или можно сменить уровень сигнала тактирования, сделать выборку (или установку) данных, снова сменить уровень сигнала, снова сделать выборку (установку) данных... Посмотрите по ссылке.. Всё достаточно понятно, тем более вы реализуета spi-master, значит сами выбираете скорость тактирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 28 июля, 2012 Опубликовано 28 июля, 2012 (изменено) · Жалоба Ссылку я и ранее читал. Сейчас более подробно изучил временные диаграммы цикла синхронизации. Допустим, я волевым решением выбираю режим 0. Установку делаю так: 1. Изначально устанавливаю низкий уровень сигнала (НУС) на входе SCK (так сказать инициализация, так как неизвестно какой там был уровень сигнала). Думаю, что при этом на входе SI должен быть высокий уровень сигнала (ВУС), так как если до этого SCK имел ВУС, то, согласно режима 0 произойдет установка бита, который был в это время на входе SI. А так как любое "общение" начинается с отправки оп-кода (который, в свою очередь, всегда начинается с НУС), то начало "общения", начавшееся с ВУС, проигнорируется микросхемой. 2. Устанавливаю ВУС на входе SCK. 3. Устанавливаю на входе SI необходимый уровень установки (бит, который надо записать). 4. Устанавливаю НУС на входе SCK (то есть, по сути, произвожу запись бита в микросхему). 5. Если необходимо продолжить запись, перехожу к пункту 2. Скажите, мой алгоритм правильный? Изменено 28 июля, 2012 пользователем d7d1cd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 28 июля, 2012 Опубликовано 28 июля, 2012 · Жалоба Скажите, мой алгоритм правильный? Нет. 2. Устанавливаю ВУС на входе SCK. 3. Устанавливаю на входе SI необходимый уровень установки (бит, который надо записать). 4. Устанавливаю НУС на входе SCK (то есть, по сути, произвожу запись бита в микросхему). По рисункам по ссылке и по даташиту видно что запись данных в режиме 0 происходит по фронту сигнала SCK, а установка сигнала SI происходит по срезу SCK. То есть так: 3. Устанавливаю на входе SI необходимый уровень установки (бит, который надо записать). 2. Устанавливаю ВУС на входе SCK(то есть, по сути, произвожу запись бита в микросхему). 4. Устанавливаю НУС на входе SCK . 5. Если необходимо продолжить запись, перехожу к пункту 2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 28 июля, 2012 Опубликовано 28 июля, 2012 (изменено) · Жалоба То есть так: 3. Устанавливаю на входе SI необходимый уровень установки (бит, который надо записать). 2. Устанавливаю ВУС на входе SCK(то есть, по сути, произвожу запись бита в микросхему). 4. Устанавливаю НУС на входе SCK . 5. Если необходимо продолжить запись, перехожу к пункту 2. А если до начала всех действий на входе SCK уже будет ВУС? Тогда все равно все будет правильно работать? P.S. И, наверное, тогда все будет выглядеть так: 1. Устанавливаю на входе SI необходимый уровень установки (бит, который надо записать). 2. Устанавливаю ВУС на входе SCK. 3. Устанавливаю НУС на входе SCK . 4. Если необходимо продолжить запись, перехожу к пункту 1. Изменено 28 июля, 2012 пользователем d7d1cd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 28 июля, 2012 Опубликовано 28 июля, 2012 · Жалоба А если до начала всех действий на входе SCK уже будет ВУС? Тогда все равно все будет правильно работать? Наверное будет работать. Но откуда там взяться 1? Сигнал на SCK формирует ваша программа. Вот и обеспечте правильную диаграмму: Обмен начинается с SCK=0 (пишу только по SCK) Обмен заканчивается срезом по выводе SCK. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 28 июля, 2012 Опубликовано 28 июля, 2012 · Жалоба Спасибо за помощь. Еще такой момент: после отправки в микросхему памяти оп-кода на чтение, я начинаю считывать данные. Алгоритм должен быть такой? ... 1. Устанавливаю на входе SI уровень последнего бита адреса чтения; 2. Устанавливаю ВУС на входе SCK; 3. Устанавливаю НУС на входе SCK ; 4. Считываю с SO первый бит байта, адрес которого был в оп-коде; 5. Если необходимо продолжить чтение, переходим к пункту 2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться