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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Чтение\запись по SPI
d7d1cd
сообщение Jul 26 2012, 14:36
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



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

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

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


Сообщение отредактировал d7d1cd - Jul 26 2012, 14:40
Go to the top of the page
 
+Quote Post
ut1wpr
сообщение Jul 26 2012, 15:47
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 98
Регистрация: 20-06-05
Пользователь №: 6 150



Цитата(d7d1cd @ Jul 26 2012, 17:36) *
Привет всем! У меня в устройстве микроконтроллер MSP430F149, к которому подключены 3 микросхемы памяти (для четвертой есть место, но она сама отсутствует). Схему подключения привожу ниже.

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

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

1. С чтения ДШ на память XX-YY-zzz.
2. Чтение ДШ на МК MSP430F149.
3. Чтение описания протокола I2C.
4. После изучения (а не только прочтения) пп 2 и 3 реализовать протокол.

п.4 можно заменить рытьем и нытьем на форумах. Смотря какая цель преследуется.
Если сдать курсак назавтра и забыть, вариант выпросить-упросить написать наиболее предпочтителен.
Тут уж не до самолюбия.
А если действительно научится - тут уж никуда не денешься. Все три пункта по порядку... sm.gif
PS Не совсем понятно по тексту поста, для кого перевод с Си на АСМ не составит проблем? Для топикстартера? Или это не вопрос а утверждение? Знака вопроса нет, значит ТС это утверждает. Так?
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Jul 26 2012, 16:20
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Я конечно понимаю, что вы ошиблись, но 3 пункт здесь вообще не к месту. Изучаем протокол SPI. Это первое. Второе - это то, что мне надо именно научиться. Третье: да, я утверждаю, что перевод с С на АСМ - не проблема (по крайней мере это намного проще, чем перевести с АСМ на С).
На счет "рытья и нытья на форумах": скажите, а зачем же еще нужны форумы? Вы предлагаете тупо сидеть, читать ДШ, экспериментировать раз за разом и ни у кого ничего не спрашивать?
Ладно, все это не по теме. Я почитал описание протокола SPI. Понял как выбрать микросхему, с которой работать. Понял принцип отправки\получения данных. Не понятно как задать адрес, с которого производить чтение\запись.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 26 2012, 16:34
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(d7d1cd @ Jul 26 2012, 19:20) *
перевод с С на АСМ - не проблема

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

Цитата(d7d1cd @ Jul 26 2012, 19:20) *
Не понятно как задать адрес, с которого производить чтение\запись.

Для того чтобы ответить на этот вопрос нужно знать тип микросхемы памяти и посмотреть соответствующую команды в ДШ.
Или угадать прикажете?
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Jul 26 2012, 16:48
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



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

Сообщение отредактировал d7d1cd - Jul 26 2012, 16:54
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 26 2012, 17:05
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(d7d1cd @ Jul 26 2012, 19:48) *
Чтобы труд не был напрасным, буду сразу писать на АСМ. Можно я не буду говорить зачем мне такой геморрой?

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

Цитата(d7d1cd @ Jul 26 2012, 19:48) *
Микросхема памяти, используемая в устройстве - FM25CL64.

А что не ясно то?
Чтение
CS=0
SendByte(0x03)
SendByte(addr/256) - посылка старшего байта адреса
SendByte(255) - посылка младшего байта адреса
ReadByte() сколько нужно раз
CS=1
Цитата(d7d1cd @ Jul 26 2012, 19:48) *
И еще вопрос: при указанном подключении, можно ли использовать для чтения\записи какую-то периферию микроконтроллера?

Обычно для чтения\записи по SPI-интерфейсу используется SPI-периферия МК. Или это может быть USART в spi-режиме. Или программная эмуляция spi. Смотрите в ДШ на МК.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 26 2012, 21:02
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(d7d1cd @ Jul 26 2012, 21:48) *
Микросхема памяти, используемая в устройстве - FM25CL64.
И еще вопрос: при указанном подключении, можно ли использовать для чтения\записи какую-то периферию микроконтроллера?
При указанном подключении - нет. Для использования аппаратных возможностей MSP430, м/с SPI должны быть подключены к пинам МК, на которые выведены функции USART0 или USART1. USART нужно настроить для использования в режиме SPI. Подключение следующее

FM25CL64 --- MSP430F149IPW
=======================
CS --- любой пин GPIO
SO --- SOMIx
WP --- любой пин GPIO
SI --- SIMOx
SCL --- UCLKx
HOLD --- любой пин GPIO или подключить к VCC, как в вашей схеме

Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Jul 27 2012, 02:56
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



К сожалению, схему подключения переделать нельзя. Придется "общаться" с микросхемами при существующем подключении, и реализовывать весь алгоритм "общения" "ручками". Что называется - программно реализовывать. Буду изучать ДШ микросхем памяти пока.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Jul 27 2012, 16:20
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



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

Сообщение отредактировал d7d1cd - Jul 27 2012, 16:31
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 27 2012, 17:25
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(d7d1cd @ Jul 27 2012, 19:20) *
Возник вопрос по режимам SPI. Сказано, что микросхема FM25CL64 поддерживает 2 режима: 0 и 3. А как выбрать тот или иной режим?

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

Цитата(d7d1cd @ Jul 27 2012, 19:20) *
И еще: выборка и установка данных обязательно должна происходить только во время смены одного уровня сигнала тактирования на другой или можно сменить уровень сигнала тактирования, сделать выборку (или установку) данных, снова сменить уровень сигнала, снова сделать выборку (установку) данных...


Посмотрите по ссылке..
Всё достаточно понятно, тем более вы реализуета spi-master, значит сами выбираете скорость тактирования.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Jul 28 2012, 04:44
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



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

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

Сообщение отредактировал d7d1cd - Jul 28 2012, 04:44
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 28 2012, 12:21
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(d7d1cd @ Jul 28 2012, 07:44) *
Скажите, мой алгоритм правильный?

Нет.

Цитата(d7d1cd @ Jul 28 2012, 07:44) *
2. Устанавливаю ВУС на входе SCK.
3. Устанавливаю на входе SI необходимый уровень установки (бит, который надо записать).
4. Устанавливаю НУС на входе SCK (то есть, по сути, произвожу запись бита в микросхему).

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

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

Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Jul 28 2012, 12:57
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(_Артём_ @ Jul 28 2012, 16:21) *
То есть так:

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


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

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


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


Сообщение отредактировал d7d1cd - Jul 28 2012, 13:02
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 28 2012, 13:04
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(d7d1cd @ Jul 28 2012, 15:57) *
А если до начала всех действий на входе SCK уже будет ВУС? Тогда все равно все будет правильно работать?

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

Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Jul 28 2012, 13:26
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



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

...
1. Устанавливаю на входе SI уровень последнего бита адреса чтения;
2. Устанавливаю ВУС на входе SCK;
3. Устанавливаю НУС на входе SCK ;
4. Считываю с SO первый бит байта, адрес которого был в оп-коде;
5. Если необходимо продолжить чтение, переходим к пункту 2.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th June 2025 - 00:20
Рейтинг@Mail.ru


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