|
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 |
|
| 14.10.2013, 17:20 | |
|
Ответы с готовыми решениями:
11
msp430g2553 USCI SPI задержки MSP430G2553 через SPI к CC110L USART в роли SPI [Решено] |
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 14.10.2013, 17:50 | ||
Что могу предложить в помощь: 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 | ||||||
Цитата: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 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 14.10.2013, 18:57 | ||
ТС, а логический анализатор у Вас есть? Посмотреть бы, что на шине творится.
0
|
||
|
vvp161
|
|
| 14.10.2013, 19:06 | |
|
Логического анализатора нет. Делал софотовый SPI на ассемблере (пошагово смотрел что на ножках) - тоже BE 00 3E.
Такой же софтовый SPI на ассемблере на STM8L_discovery читает правильно (BF 25 4A). |
|
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 14.10.2013, 19:27 | ||
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 | ||
Это я к тому, что съезжание битов может происходить где-то в другой части алгоритма. И - не знаю, как в 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 | ||
http://ww1.microchip.com/downtoods/en/D ... 25071A.pdf стр. 9, то кол-во пустых байтов после отправки команды - 0. |
||
| 21.07.2014, 00:35 | |
|
Помогаю со студенческими работами здесь
12
HAL +SPI + LIS3DH [РЕШЕНО] Проблемы с fatfs через spi [решено]. [РЕШЕНО] SPI. 5v (Master) --> 3.3v(Slave). Сопряжение. Проблемы с SPI. STM32F103C6 + гироскоп L3G4200D [решено] [Решено] STM32F407 SPI slave + Cubieboard2 не работает Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
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, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|