Перейти к содержанию
    

Привет всем! У меня в устройстве микроконтроллер MSP430F149, к которому подключены 3 микросхемы памяти (для четвертой есть место, но она сама отсутствует). Схему подключения привожу ниже.

 

Моя задача написать функцию чтения\записи одного байта информации из любой микросхемы по любому адресу. Основная проблема в том, что функцию надо написать на ассемблере. Думаю, что подобную функцию, написанную на С, перевести на ассемблер проблем не составит.

 

Подскажите, пожалуйста, с чего мне начать?

1png_5353468_5364744.png

Изменено пользователем d7d1cd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет всем! У меня в устройстве микроконтроллер MSP430F149, к которому подключены 3 микросхемы памяти (для четвертой есть место, но она сама отсутствует). Схему подключения привожу ниже.

 

Моя задача написать функцию чтения\записи одного байта информации из любой микросхемы по любому адресу. Основная проблема в том, что функцию надо написать на ассемблере. Думаю, что подобную функцию, написанную на С, перевести на ассемблер проблем не составит.

 

Подскажите, пожалуйста, с чего мне начать?

1. С чтения ДШ на память XX-YY-zzz.

2. Чтение ДШ на МК MSP430F149.

3. Чтение описания протокола I2C.

4. После изучения (а не только прочтения) пп 2 и 3 реализовать протокол.

 

п.4 можно заменить рытьем и нытьем на форумах. Смотря какая цель преследуется.

Если сдать курсак назавтра и забыть, вариант выпросить-упросить написать наиболее предпочтителен.

Тут уж не до самолюбия.

А если действительно научится - тут уж никуда не денешься. Все три пункта по порядку... :)

PS Не совсем понятно по тексту поста, для кого перевод с Си на АСМ не составит проблем? Для топикстартера? Или это не вопрос а утверждение? Знака вопроса нет, значит ТС это утверждает. Так?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я конечно понимаю, что вы ошиблись, но 3 пункт здесь вообще не к месту. Изучаем протокол SPI. Это первое. Второе - это то, что мне надо именно научиться. Третье: да, я утверждаю, что перевод с С на АСМ - не проблема (по крайней мере это намного проще, чем перевести с АСМ на С).

На счет "рытья и нытья на форумах": скажите, а зачем же еще нужны форумы? Вы предлагаете тупо сидеть, читать ДШ, экспериментировать раз за разом и ни у кого ничего не спрашивать?

Ладно, все это не по теме. Я почитал описание протокола SPI. Понял как выбрать микросхему, с которой работать. Понял принцип отправки\получения данных. Не понятно как задать адрес, с которого производить чтение\запись.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

перевод с С на АСМ - не проблема

Может это и не проблеиа, но наверняка напрасный труд. Зачем перевод нужен?

 

Не понятно как задать адрес, с которого производить чтение\запись.

Для того чтобы ответить на этот вопрос нужно знать тип микросхемы памяти и посмотреть соответствующую команды в ДШ.

Или угадать прикажете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы труд не был напрасным, буду сразу писать на АСМ. Можно я не буду говорить зачем мне такой геморрой?

Микросхема памяти, используемая в устройстве - FM25CL64.

И еще вопрос: при указанном подключении, можно ли использовать для чтения\записи какую-то периферию микроконтроллера? Я, по крайней мере, такой не нашел. Может все из-за неопытности...

Изменено пользователем d7d1cd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы труд не был напрасным, буду сразу писать на АСМ. Можно я не буду говорить зачем мне такой геморрой?

Геморой - дело добровольное. Да и место Сизифа всегда вакантно.

 

Микросхема памяти, используемая в устройстве - FM25CL64.

А что не ясно то?

Чтение

CS=0

SendByte(0x03)

SendByte(addr/256) - посылка старшего байта адреса

SendByte(255) - посылка младшего байта адреса

ReadByte() сколько нужно раз

CS=1

И еще вопрос: при указанном подключении, можно ли использовать для чтения\записи какую-то периферию микроконтроллера?

Обычно для чтения\записи по SPI-интерфейсу используется SPI-периферия МК. Или это может быть USART в spi-режиме. Или программная эмуляция spi. Смотрите в ДШ на МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Микросхема памяти, используемая в устройстве - FM25CL64.

И еще вопрос: при указанном подключении, можно ли использовать для чтения\записи какую-то периферию микроконтроллера?

При указанном подключении - нет. Для использования аппаратных возможностей MSP430, м/с SPI должны быть подключены к пинам МК, на которые выведены функции USART0 или USART1. USART нужно настроить для использования в режиме SPI. Подключение следующее

 

FM25CL64 --- MSP430F149IPW

=======================

CS --- любой пин GPIO

SO --- SOMIx

WP --- любой пин GPIO

SI --- SIMOx

SCL --- UCLKx

HOLD --- любой пин GPIO или подключить к VCC, как в вашей схеме

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению, схему подключения переделать нельзя. Придется "общаться" с микросхемами при существующем подключении, и реализовывать весь алгоритм "общения" "ручками". Что называется - программно реализовывать. Буду изучать ДШ микросхем памяти пока.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поизучал ДШ. Возник вопрос по режимам SPI. Сказано, что микросхема FM25CL64 поддерживает 2 режима: 0 и 3. А как выбрать тот или иной режим? Или я что-то недопонимаю?

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

Изменено пользователем d7d1cd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возник вопрос по режимам SPI. Сказано, что микросхема FM25CL64 поддерживает 2 режима: 0 и 3. А как выбрать тот или иной режим?

Выбрать волевым решением.

Какой это будет режим 0 или 3, FM25 сам разберёт.

 

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

 

Посмотрите по ссылке..

Всё достаточно понятно, тем более вы реализуета spi-master, значит сами выбираете скорость тактирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ссылку я и ранее читал. Сейчас более подробно изучил временные диаграммы цикла синхронизации. Допустим, я волевым решением выбираю режим 0. Установку делаю так:

1. Изначально устанавливаю низкий уровень сигнала (НУС) на входе SCK (так сказать инициализация, так как неизвестно какой там был уровень сигнала). Думаю, что при этом на входе SI должен быть высокий уровень сигнала (ВУС), так как если до этого SCK имел ВУС, то, согласно режима 0 произойдет установка бита, который был в это время на входе SI. А так как любое "общение" начинается с отправки оп-кода (который, в свою очередь, всегда начинается с НУС), то начало "общения", начавшееся с ВУС, проигнорируется микросхемой.

2. Устанавливаю ВУС на входе SCK.

3. Устанавливаю на входе SI необходимый уровень установки (бит, который надо записать).

4. Устанавливаю НУС на входе SCK (то есть, по сути, произвожу запись бита в микросхему).

5. Если необходимо продолжить запись, перехожу к пункту 2.

 

Скажите, мой алгоритм правильный?

Изменено пользователем d7d1cd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скажите, мой алгоритм правильный?

Нет.

 

2. Устанавливаю ВУС на входе SCK.

3. Устанавливаю на входе SI необходимый уровень установки (бит, который надо записать).

4. Устанавливаю НУС на входе SCK (то есть, по сути, произвожу запись бита в микросхему).

По рисункам по ссылке и по даташиту видно что запись данных в режиме 0 происходит по фронту сигнала SCK, а установка сигнала SI происходит по срезу SCK.

 

То есть так:

3. Устанавливаю на входе SI необходимый уровень установки (бит, который надо записать).

2. Устанавливаю ВУС на входе SCK(то есть, по сути, произвожу запись бита в микросхему).

4. Устанавливаю НУС на входе SCK .

5. Если необходимо продолжить запись, перехожу к пункту 2.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть так:

 

3. Устанавливаю на входе SI необходимый уровень установки (бит, который надо записать).

2. Устанавливаю ВУС на входе SCK(то есть, по сути, произвожу запись бита в микросхему).

4. Устанавливаю НУС на входе SCK .

5. Если необходимо продолжить запись, перехожу к пункту 2.

 

А если до начала всех действий на входе SCK уже будет ВУС? Тогда все равно все будет правильно работать?

 

P.S. И, наверное, тогда все будет выглядеть так:

 

 

1. Устанавливаю на входе SI необходимый уровень установки (бит, который надо записать).
2. Устанавливаю ВУС на входе SCK.
3. Устанавливаю НУС на входе SCK .
4. Если необходимо продолжить запись, перехожу к пункту 1.

Изменено пользователем d7d1cd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если до начала всех действий на входе SCK уже будет ВУС? Тогда все равно все будет правильно работать?

Наверное будет работать.

Но откуда там взяться 1? Сигнал на SCK формирует ваша программа. Вот и обеспечте правильную диаграмму:

Обмен начинается с SCK=0 (пишу только по SCK)

Обмен заканчивается срезом по выводе SCK.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за помощь. Еще такой момент: после отправки в микросхему памяти оп-кода на чтение, я начинаю считывать данные. Алгоритм должен быть такой?

 

...

1. Устанавливаю на входе SI уровень последнего бита адреса чтения;

2. Устанавливаю ВУС на входе SCK;

3. Устанавливаю НУС на входе SCK ;

4. Считываю с SO первый бит байта, адрес которого был в оп-коде;

5. Если необходимо продолжить чтение, переходим к пункту 2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...