Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/97: Рейтинг темы: голосов - 97, средняя оценка - 4.99
vvp161

Проблема со SPI (MSP430g2553 и SST25VF032) (решено)

14.10.2013, 17:20. Показов 19341. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может кто-то работал со SPI на MSP430, и сталкивался с такой проблемой.
Пытаюсь к MSP430g2553 (LP EXP430g2) через SPI подключить память SST25VF032. (Перемычка P1.6 убрана для USCI B)
Отправляю команду 9F (JEDEC ID read). Вместо нужных BF 25 4A, принимается BE 00 3E. Пытался и через прерывание и без них, и USCI B и USCI A, и на Си и на Ассемблере, и софтовый SPI - результат только BE 00 3E.

Эта же микросхем памяти (SST25VF032) на STM8L_discovery читается правильно (BF 25 4A).

Мой вариант на Си, немного переделанный пример с сайта TI. Сначала вручную потом через прерывание. И там и там BE 00 3E.
//======================================== =========================

#include "io430.h"

unsykned char MST_Data, SLV_Data1,SLV_Data2,SLV_Data3,SLV_Data4, Cicl;

int main(void)
{
volatile unsykned int i;

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

P1OUT |=BIT5; // Shyp Dysable
P1DIR |=BIT5; //

P1SEL = BIT1 + BIT2 + BIT4; // P 1.1 SPI In + P 1.2 SPI Out + P 1.4 SPI Clock
P1SEL2 = BIT1 + BIT2 + BIT4; // P 1.1 SPI In + P 1.2 SPI Out + P 1.4 SPI Clock

UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit SPI mostir UCCKPH + UCCKPL
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 |= 0x01; // /2
UCA0BR1 = 0; //
UCA0MCTL = 0; // No modulation
UCA0CTL1 &= ~UCSWRST; // **Initiotyze USCI state machine**
// IE2 |= UCA0RXIE; // Enable USCI0 RX interrupt

__delay_cycles(75); // Woyt for slave to initiotyze

//======================================== =========================
P1OUT &= ~BIT5; //Shyp Enable

UCA0TXBUF = 0x9F;
while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?
SLV_Data1=UCA0RXBUF;

UCA0TXBUF = 0x00;
while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?
SLV_Data2=UCA0RXBUF;

UCA0TXBUF = 0x00;
while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?
SLV_Data3=UCA0RXBUF;

UCA0TXBUF = 0x00;
while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?
SLV_Data4=UCA0RXBUF;

P1OUT |=BIT5; //Shyp Dysable

//======================================== ===============

IE2 |= UCA0RXIE; // Enable USCI0 RX interrupt
__delay_cycles(750);
//======================================== ===============
P1OUT &= ~BIT5; // Shyp Enable

Cicl=3;

UCA0TXBUF = 0x9F; // Transmit first character

__bis_SR_rikystir(LPM0_bits + GIE); // CPU off, enable interrupts
}

//======================================== =========================
// Test for votyd RX omd TX character
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCIB0RX_ISR(void)
{
volatile unsykned int i;

while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?

SLV_Data1=UCA0RXBUF;

UCA0TXBUF = 0x00 ; // Send next value
Cicl=Cicl-1;
if (Cicl==0) P1OUT |=BIT5; //Shyp Dysable
__delay_cycles(50); // Add time between transmissions to
} // make sure slave can keep up
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.10.2013, 17:20
Ответы с готовыми решениями:

msp430g2553 USCI SPI задержки
Приветствую. Собственно вот кусок кода: bic.b #00010000b,&P1OUT ; CS low mov.b #5Ah,&UCB0TXBUF ; transmit ...

MSP430G2553 через SPI к CC110L
Есть МК (MSP430G2553) и есть трансмиттер Anaren LR09A на чипе CC110L всё управление чипом производиться посредством команд SPI. (Посылаем...

USART в роли SPI [Решено]
В документации на некоторые контроллеры AVR указано, что модуль USORT может работать как ведущий шины SPI и даже приведен пример кода, это...

11
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
14.10.2013, 17:50
Цитата Сообщение от vvp161
Отправляю команду 9F (JEDEC ID read). Вместо нужных BF 25 4A, принимается BE 00 3E. Пытался и через прерывание и без них, и USCI B и USCI A, и на Си и на Ассемблере, и софтовый SPI - результат только BE 00 3E.
У меня на AVR эта микросхема выдаёт правильный ID.

Что могу предложить в помощь:

1) Поиграйтесь с фазами UCCKPH / UCCKPL. Одну комбинацию попробовали - проверьте остальные три. Кстати, по комментарию у Вас PH+PL, а реально по коду - похоже, только UCCKPL.

2) Байты ID надо считывать после отправки dummy-байтов (например, 0x00). У Вас же первый байт ID читается после отправки кода команды. Рано! Надо ещё нолик послать.

3) Когда отправляете самый последний байт 0x00, то сразу же делаете chip unselect. Смысл такой отправки?! Поставьте её под условие "if (Cicl==0)" в ветвь "else".

4) В обработчике RX прерывания я бы сначала забирал полученный из SPI байт, а уж потом ожидал бы готовности TX.

5) Если ничто из выше предложенного не поможет, попробуйте без low-power режима (CPU off)

6) Не понятно, куда переходит программа в конце main() - то есть после последней строки "__bis_SR_rikystir(LPM0_bits + GIE); // CPU off, enable interrupts".
0
vvp161
14.10.2013, 18:13
1) Поиграйтесь с фазами UCCKPH / UCCKPL. Одну комбинацию попробовали - проверьте остальные три. Кстати, по комментарию у Вас PH+PL, а реально по коду - похоже, только UCCKPL.
Пробовал все варианты. Либо 00 00 00, либо BE 00 3E.

2) Байты ID надо считывать после отправки dummy-байтов (например, 0x00). У Вас же первый байт ID читается после отправки кода команды. Рано! Надо ещё нолик послать.
Это на всякий случай читается, может что получает.

3) Когда отправляете самый последний байт 0x00, то сразу же делаете chip unselect. Смысл такой отправки?! Поставьте её под условие "if (Cicl==0)" в ветвь "else".
Код делался чтоб просто посмотреть что принимается.

4) В обработчике RX прерывания я бы сначала забирал полученный из SPI байт, а уж потом ожидал бы готовности TX.
Я брал пример от TI, у них так.

5) Если ничто из выше предложенного не поможет, попробуйте без low-power режима (CPU off)
Без LPM0 - тоже самое BE 00 3E.

Цитата:6) Не понятно, куда переходит программа в конце main() - то есть после последней строки "__bis_SR_rikystir(LPM0_bits + GIE); // CPU off, enable interrupts".

Насколько я понял - программа зацикливается на месте.
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
14.10.2013, 18:42
Цитата Сообщение от vvp161
Насколько я понял - программа зацикливается на месте.
Она выходит из main`а обратно в стартап, там конечно делают обычно заглушку, но надеяться на это себе дороже.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
14.10.2013, 18:57
Цитата Сообщение от яверт
Цитата Сообщение от vvp161
Насколько я понял - программа зацикливается на месте.
Она выходит из main`а обратно в стартап, там конечно делают обычно заглушку, но надеяться на это себе дороже.Да уж, надёжнее вставить зацикливание в main(), чтобы было всё перед глазами / под контролем, и не думалось.

ТС, а логический анализатор у Вас есть? Посмотреть бы, что на шине творится.
0
vvp161
14.10.2013, 19:06
Логического анализатора нет. Делал софотовый SPI на ассемблере (пошагово смотрел что на ножках) - тоже BE 00 3E.
Такой же софтовый SPI на ассемблере на STM8L_discovery читает правильно (BF 25 4A).
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
14.10.2013, 19:22
ЗЫ в mspgcc судя по доке для экономии стёка main не вызывается call`ом, а происходит jump по адресу. В этом случае проц. после окончания main`а будет выполнять мусор из флеш, наверняка с феерическими глюками.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
14.10.2013, 19:27
Цитата Сообщение от vvp161
Логического анализатора нет. Делал софотовый SPI на ассемблере (пошагово смотрел что на ножках) - тоже BE 00 3E.
А попробуйте (других идей ведь пока нет?) другую команду чтения ID - 0x90 или 0xAB. И сравните поведение с 0x9F.
0
vvp161
14.10.2013, 19:42
0x90 или 0xAB дают BE 07 C0 F8, вместо нужных BF 4A BF 4A
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
14.10.2013, 19:52
Цитата Сообщение от vvp161
0x90 или 0xAB дают BE 07 C0 F8, вместо нужных BF 4A BF 4A
А это уже ярко выраженная тенденция. Сознавайтесь: куда принятые по SPI байты отправляете - в какой-то интерфейс? на дисплей?
Это я к тому, что съезжание битов может происходить где-то в другой части алгоритма.

И - не знаю, как в MSP430, - но может быть нужны какие-то pull-up или pull-down резисторы на шине, чтобы этих сбоев не было? Заодно и на незадействованных ногах флэшки проверьте, чтоб был чёткий уровень 0 или 1, а не висели в воздухе.

И соединительный кабель между МК и SST25 - тот же самый, который использовался с STM8?
0
vvp161
14.10.2013, 22:28
Перепаял проводки на более короткие (с 10 см уменьшил до 3 см) и все заработало ;)
Получается msp430 более чувствительны к наводкам чем stm8.
Всем Спасибо за помощь !!!
houmd672
21.07.2014, 00:35
2) Байты ID надо считывать после отправки dummy-байтов (например, 0x00). У Вас же первый байт ID читается после отправки кода команды. Рано! Надо ещё нолик послать
Так согласно даташиту на эту флешку :
http://ww1.microchip.com/downtoods/en/D ... 25071A.pdf

стр. 9, то кол-во пустых байтов после отправки команды - 0.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.07.2014, 00:35
Помогаю со студенческими работами здесь

HAL +SPI + LIS3DH [РЕШЕНО]
Добрый день! Что то никак не могу нормально заставить работать простой SPI без DMA из HAL с акселерометром. Вернее могу, если кусок в...

Проблемы с fatfs через spi [решено].
Возникала такая проблема с fatfs через spi. Система монтируется, файлы открываются, и даже создаются пустые файлы, но их не возможно...

[РЕШЕНО] SPI. 5v (Master) --> 3.3v(Slave). Сопряжение.
Приветствую. Что-то у меня не получается считатывать из SD(3.3в) карточки данные в ATmega128 (5v). Раньше работало, но карточка висела...

Проблемы с SPI. STM32F103C6 + гироскоп L3G4200D [решено]
Здравствуйте. Подключаю гироскоп L3G4200D к STM32F103. Вот из даташита схема взаимодействия по SPI (кликабельно) <Изображение...

[Решено] STM32F407 SPI slave + Cubieboard2 не работает
Добрый день! Отлаживаю связку STM32F407 SPI в режиме slave и Cubieboard2. SPI не передаёт данные, пока я не войду в режим отладки (Keil)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru