SPI, здається, одягнений на MSP430


9

Я намагаюся отримати розумні біти з шини-пірата, підключеної до плати запуску (за допомогою кабелю Sparkfun: помаранчевий переходить до P1.6, жовтий - до P1.5. Це має бути правильним, якщо я не плутаю MOSI і MISO ...). У мене немає підключеної CS, оскільки я просто використовую піратський автобус для будь-якого моніторингу.

Пірат шини встановлений для SPI, 125 кГц, полярність тактової частоти в режимі холостого ходу, вихідний край тактової частоти активний до холостого ходу, фаза середини вхідного зразка / CS, вихід нормальний.

На пусковій панелі у мене є MSP430G2231 без зовнішнього кристала. Використовуючи Code Composer Studio, у мене є наступне:

#include  "msp430g2231.h"
volatile unsigned char value=0;

#pragma vector=USI_VECTOR
__interrupt void universal_serial_interface(void)
{
    value+=1;
    USISRL=value;
    USICNT=8;
}
void main(void){
    WDTCTL = WDTPW + WDTHOLD;

    BCSCTL1 = CALBC1_1MHZ;                    // Set range
    DCOCTL = CALDCO_1MHZ;
    BCSCTL2 &= ~(DIVS_3);

    USICTL0 |= USIPE7 +  USIPE6 + USIPE5 + USIMST + USIOE;
    USICTL1 |= USIIE;
    USICKCTL = USIDIV_3 + USISSEL_2;
    USICTL0 &= ~USISWRST;
    USISRL=value;
    USICNT = 8;

    __bis_SR_register(LPM0_bits+ GIE);  
}

Більшість із них обмотується разом із різних зразків. Після багатого прочитання аркуша даних здається, що годинник USI встановлений на 125 КГц (SMCLK 1 МГц, розділений на 8), хоча у мене немає можливості вимірювати це.

Під час бігу я отримую те, що по суті є сміттям з пірата автобуса. P поставив точку перерви на перший рядок вектору переривання USI, і він повинен був пройти три рази, тому я повинен був отримати 0, 1, 2 від пірата шини

0x00(0x00)0x00(0x00)][0x40(0x00)]

І дозволяючи йому вільно бігати, я просто отримую такі речі:

[0xFF(0x00)][0x3F(0x00)][0x7F(0x00)][0xBF(0x00)][0xC0(0x00)0x00(0x00)][0x40(0x00)0x80(0x00)]

Що все ще не схоже на те, що я очікую.

Я провів більшу частину вечора, переглядаючи посібник користувача для чіпа, і я все ще спотикаюся.

Пишучи це, я виявив, що можу використовувати шину піратів як логічний аналізатор (використовуючи LogicSniffer), і налаштував це на це. І змінив програму, щоб записати 0x55 на USISRLта змінити на, USIDIVщоб USIDIV_4трохи пригальмувати, і ось результати: введіть тут опис зображення

Тактовий сигнал виглядає добре, LogicSniffer повідомляє, що це близько 285 КГц ... а MOSI - це ... особливий. Я б очікував приємного чергування візерунка, оскільки я виписую 0x55, і це все, але тільки.

У когось є думки щодо того, що я можу зробити неправильно? Дефектний чіп? Щось ще?

EDIT: Гаразд, незначна кількість ідіотизму з мого боку. Я не змінив значення, яке записується в SPI під час переривання. Виконання цього результату за очікуваною схемою:

введіть тут опис зображення

Однак, повертаючись до спроби виписати байт, що збільшується, отримує мені сміття: введіть тут опис зображення

Отже, у мене все ще є проблема, не така вже велика, як я думав ...

EDIT 2: Завдяки коментарям нижче, я зв'язав провід заземлення від кабелю Bus Pirate, який раніше не був підключений, до заземлення від мого джерела живлення (блок живлення Sparkfun). Раніше найближчий майданчик, який вони поділилися, повернувся в USB-концентратор, на якому я вішаю все це обладнання.

Це усунуло збої в MOSI під час запуску лічильної програми, і LogicSniffer тепер може самостійно розшифрувати байти: введіть тут опис зображення

Пірат шини в режимі монітора все ще повідомляє про незвичайні результати:

[0x00(0x00)][0x04(0x00)][0x06(0x00)][0x10(0x00)][0x10(0x00)][0x10(0x00)][0x12(0x00)][0x18(0x00)]

Здається, краще виявити кінці запису (я припускаю, що це обмеження квадратних дужок), але дані декодування все ще вимкнено. Мені зараз не зовсім так стурбовано, що форма хвилі виглядає краще, але все одно було б добре знати, чому автобусний пірат заплутався.


3
Ця остання діаграма виглядає так, що має глюки на лінії MOSI, може бути перехресним зверненням від кланку. Ви осцилоскоп? Як вам подобається електропроводка - у вас хороший міцний короткий проміжок між BusPirate та MSP430?
Мартін Томпсон

2
Я згоден з @MartinThompson. Лінія MOSI блищить, а автобусний пірат заплутався. Якщо трохи примружити другу картинку і проігнорувати те, що думає Bus Pirate (я просто набрав двійкове я бачу в калькулятор Windows і перетворив його в шістнадцятковий), ви отримаєте 6B-6C-6D, збільшуючись як хочете. Потрібно почистити проводку між автобусом Пірат та МСП.
embedded.kyle

Я не бачу while(1);ані еквівалентного в кінці main (), щоб зупинити його вихід і робити випадкові речі.
Олі Глазер

2
@OliGlaser, якщо я читаю аркуш правильно, входження в LPM0 фактично зупиняє виконання процесора, поки не відбудеться переривання. Більшість, якщо не всі зразки TI використовують це. Це має сенс, оскільки вони рекламують MSP430 як частини з низькою потужністю, а зайнятий цикл не дуже зручний для живлення.
Метт Сікер

1
О мій, я щойно помітив, що це> 1 рік.
апалопохапа

Відповіді:


3

MSP430 - приклад MCU, який інвертує конвенцію іменування CPHA, тим самим розходячись від стандартного опису SPI: TI MSP430 використовує назву UCCKPL замість CPOL, а його UCCKPH є зворотним CPHA. Підключаючи дві мікросхеми разом, уважно вивчіть значення ініціалізації фазової тактової частоти, щоб переконатися у використанні правильних налаштувань.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.