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

 
 
 
Reply to this topicStart new topic
> MRF24J40MA SPI проблема, странно себя ведет - доктор, что я делаю не так?
A. Fig Lee
сообщение Jul 9 2014, 14:57
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Здравствуйте,
прикупил 2 модулька означенных на digikey, припаял контакты, подсоединил проводочками дюпон, тестирую.
Делаю ресет (отрицательный импульс на вывод)
и пытаюсь читать регистры, в которых после ресета есть установленные биты.
Не соответствует даташиту.
Как правило первый не нулевой MSB чиатется правильно, дальше с переменным успехом.
Попробовал писать в TXFIFO и регистры @ 0x200..
Если пишу 0xFF, читается 0xFF, если пишу 0хDF, например, читается 0хDE.
Если есть хоть 1 ноль в байте, последний бит всегда 0, чем больше 0 в байте, тем больше лишних нулей..
Ничего не понимаю..
Пользовал PIC16F26K22 аппаратный SPI, мод 00.
Смотрел логическим анализатором - говорит тоже самое что и PIC видит.
Взял другой модуль, подключил к ардуино, использовал библиотеку
https://github.com/karlp/Mrf24j40-arduino-library
и пример из http://projects.schneidr.de/2012/10/mrf24j40-and-arduino/
добавил запись и чтение регистров (пробовал и короткое и длинное)..
Так же ведет себя.

Доктор, что я делаю не так?


Вот очень похожий на мой паттерн данных посылаемых и получаемых здесь:

http://www.avrfreaks.net/index.php?name=PN...ic&p=857265

Сообщение отредактировал A. Fig Lee - Jul 9 2014, 15:38


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Voldemari4
сообщение Jul 9 2014, 16:26
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 5-05-14
Из: Минск
Пользователь №: 81 582



Посмотрите как микрочип в своих библиотеках работает, может что-то с адресацией - я имею в виду длинные и короткие адреса.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 9 2014, 16:38
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Voldemari4 @ Jul 9 2014, 12:26) *
Посмотрите как микрочип в своих библиотеках работает, может что-то с адресацией - я имею в виду длинные и короткие адреса.


Сделал как у них.

Код
void initSPI()
{
    // enable SPI1
    ANSELA = 0;
    ANSELC = 0;
    TRISAbits.TRISA5 = 0; //1;
    PORTAbits.RA5 = 1;
    TRISCbits.TRISC3 = 0; //1;
    TRISCbits.TRISC4 = 1;
    TRISCbits.TRISC5 = 0;

    SSP1STATbits.SMP = 1;
    SSP1STATbits.CKE = 1;
    SSP1CON1bits.CKP = 0;
    SSP1CON1bits.SSPM = 0;
    SSP1CON1bits.SSPEN = 1;

}

void    mrf24j40_regWrite(uint8_t reg, uint8_t data)
{
    SS_LOW
    sendSPI((reg << 1) | 1);
    sendSPI(data);
    SS_HIGH
}

uint8_t mrf24j40_regRead(uint8_t reg)
{
    uint8_t ret;
    SS_LOW
    sendSPI(reg << 1);
    ret = sendSPI(0xFF);
    SS_HIGH
    return ret;
}

void    mrf24j40_memWrite(uint16_t addr, uint8_t data)
{
    SS_LOW
    sendSPI((((uint8_t)(addr>>3))&0x7F)|0x80);
    sendSPI((((uint8_t)(addr<<5))&0xE0)|0x10);
    sendSPI(data);
    SS_HIGH
}

uint8_t mrf24j40_memRead(uint16_t addr)
{
    uint8_t ret;
    SS_LOW
    sendSPI((((uint8_t)(addr>>3))&0x7F)|0x80);
    sendSPI((((uint8_t)(addr<<5))&0xE0));
    ret = sendSPI(0xFF);
    SS_HIGH
    return ret;
}


uint8_t d1, d2;
/*
*
*/
int main(int argc, char** argv) {

    init();

    // MRF24J40MA reset
    PORTCbits.RC2 = 0;
    __delay_ms(10);
    PORTCbits.RC2 = 1;
    __delay_ms(30);


    // можно закомментировать, ничего не меняется
    mrf24j40_init(26);
    for (int i = 0; i < 8; i++) {

        mrf24j40_memWrite( i+100, 0x79);
        mrf24j40_memRead(  i+100);
        mrf24j40_regWrite(0x10 + i, 0xFF - i);
        d2 = mrf24j40_regRead(0x10 + i);
   }
..
}


У меня в принципе вопрос такой:
если я ему подал ресет на pin и подождал,
он же должен значения регистров выдавать как в даташите, без всяких
моих дополнительных телодвижений, типа инициализации PLL и т.д.?


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Voldemari4
сообщение Jul 9 2014, 17:17
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 5-05-14
Из: Минск
Пользователь №: 81 582



А вот у вас ресет на RC2, а соответствующий ему TRISС2 похоже что настроен на вход
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 9 2014, 18:25
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Voldemari4 @ Jul 9 2014, 13:17) *
А вот у вас ресет на RC2, а соответствующий ему TRISС2 похоже что настроен на вход

В init():

Код
void init() {
    TRISA = 0xF0;
    TRISB = 0xE7;
    // turn off analog inputs
    ANSELB = 0;
    //weak pullup is on by default
    // enable timer0
    T0CONbits.T0CS = 0; //internal timer
    T0CONbits.T0PS = 1; //1:4 - 4 uS clock
    T0CONbits.PSA = 1; //assign prescaler
    T0CONbits.TMR0ON = 1;


    initSPI();

    //MRFJ24 reset pin
    PORTCbits.RC2 = 1;
    TRISCbits.TRISC2 = 0;

}


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Voldemari4
сообщение Jul 9 2014, 19:07
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 5-05-14
Из: Минск
Пользователь №: 81 582



Вот читаю в инструкции, пункт 3.2
Цитата
Certain control register values must be initialized for basic operations. These values differ from the Power-on Reset values and provide improved operational parameters. These settings are normally made once after a Reset. After initialization, MRF24J40features can be configured for the application. The steps for initialization are shown in Example 3-1.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 9 2014, 19:56
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Voldemari4 @ Jul 9 2014, 15:07) *
Вот читаю в инструкции, пункт 3.2

Да, но у меня "Power on reset values" не сходятся с даташитом.
Сделал бит бэнг SPI на тех же ногах у PIC18F26K22.. Тот же результат.

Вот записываю и читаю в лупе в регистр 0х10:

00=>00
01=>00
03=>02
04=>00
05=>00
06=>04
07=>06
08=>00
09=>00
0A=>00
0B=>04
0C=>08
0D=>08
0E=>0C
0F=>0E
10=>00
11=>00
12=>00
13=>04

....
crying.gif

Пробовал замедлять, менял режимы SPI (вообще плохо), пробовал ставить
на вход ножку MOSI когда читаю данные ... Бесполезно пока..

Хоть в "длинные" регистры пиши, хоть в корокие.
Поменял SDI, SDO на пике на другие ножки.
Прогресса нет.
Остается грешить на негодные микросхемы..


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 10 2014, 16:53
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Heads up.
Поговорил с майкрочипом. Говорят не может быть, ничего не слышали чтоб был какойто брак с этими микросхемами. Рекомендовали не морочить голову, а попробовать имплементировать АН1192.
Отпишусь, как пойдет.

Уже легче


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 12 2014, 14:35
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Ничего мне это не дало.
Все тоже самое.
"Card is not inserted" потому чтение регистра по 0х10 дает 0хFE, не 0xFF.
Вот еще нашел товарищей по несчастью:
http://www.microchip.com/forums/m523339.aspx
Рекомендуют 120 Ом включить.
Попробую, отпишусь.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 13 2014, 00:57
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Bingo!
Это было оно - добавил резистор 120 Ом межды выводом SDO MRF24J40MA и MISO пика.
Взелетело! rolleyes.gif
И пример майкрочипа работает АН1192, правда пришлось там функцию работы с SPI заменить для PIC18F26K22.

Ура!


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post

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

 


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


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