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

 
 
> Не получается задействовать SPI на SIM800
BioUnit
сообщение Mar 3 2018, 14:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 24-12-17
Из: Санкт-Петербург
Пользователь №: 100 822



Здравствуйте.

Имеется SIM800 (без всяких суффиксов). Так же есть SIM800M32_EAT_140409.
Пытаюсь использовать SPI (упрощенный код):
Код
void spi_test(void)
{
    ...........
    rc = eat_spi_init(FREC_DIV, EAT_SPI_4WIRE, EAT_SPI_BIT8, EAT_FALSE, EAT_FALSE);
    eat_trace("inited=%i", (int)rc);

    ...........
    rc = eat_spi_write(data, sizeof(data), IS_COMMAND);
    eat_trace("eat_spi_write=%i", (int)rc);
}

FREC_DIV - пытался разные делители
IS_COMMAND - пытался разные значения (EAT_TRUE, EAT_FALSE)

Функции возвращают, что все ОК (rc = EAT_TRUE), но никакого эффекта.
В т.ч. смотрел осциллографом - тишина на выводах (согласно eat_periphery.h):
EAT_PIN37_SDA = 37, (GPIO, SDA, SPICS)
EAT_PIN7_CTS = 7, (GPIO, U2RXD, SPIMOSI)
EAT_PIN8_RTS = 8, (GPIO, U2TXD, SPIMISO)
EAT_PIN38_SCL = 38, (GPIO, SCL, SPISCK)

Перебрал и другие пины с целью обнаружить сигнал хоть где-то. Тишина.

Попробовал "прозвонить" пины, может кто из строя вышел. Набросал для этого такой метод:
Код
void testGPIO(u8 pin)
{
    int i;
    eat_trace("test GPIO: %i", pin);
    eat_gpio_setup(pin, EAT_GPIO_DIR_OUTPUT, EAT_GPIO_LEVEL_HIGH);
    for (i = 0; i < 10; ++i)
    {
        eat_gpio_write(pin, EAT_GPIO_LEVEL_HIGH);
        eat_sleep(100);
        eat_gpio_write(pin, EAT_GPIO_LEVEL_LOW);
        eat_sleep(100);
    }
    eat_trace("test GPIO done");
}


Все пины нормально тестятся (вижу сигнал на осциллографе).

Что не так с SPI из SDK ?
Уж больно не хочется писать свою реализацию.

Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
BioUnit
сообщение Mar 9 2018, 21:21
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 24-12-17
Из: Санкт-Петербург
Пользователь №: 100 822



Вообще, чертовщина какая-то.
Попробовал вместо SPI использовать UART. На первом все отлично, но он мне нужен для AT.
Попробовал задействовать второй.
Код
static const EatUart_enum eat_uart_app= EAT_UART_2;

static void app_main(void *data)
{
    .............................

    if (eat_uart_open(eat_uart_app) == EAT_FALSE)
    {
        eat_trace("[%s] uart(%d) open fail!", __FUNCTION__, eat_uart_app);
    }
    else
    {
        EatUartConfig_st uart_config;
        uart_config.baud = EAT_UART_BAUD_57600;
        uart_config.dataBits = EAT_UART_DATA_BITS_8;
        uart_config.parity = EAT_UART_PARITY_NONE;
        uart_config.stopBits = EAT_UART_STOP_BITS_1;
        if (EAT_FALSE == eat_uart_set_config(eat_uart_app, &uart_config))
        {
            eat_trace("[%s] uart(%d) set config fail!", __FUNCTION__, eat_uart_app);
        }
        eat_uart_set_send_complete_event(eat_uart_app, EAT_TRUE);
        eat_trace("[%s] uart(%d) Done!", __FUNCTION__, eat_uart_app);
    }

Не работает так же, как и SPI.
Ошибок при этом не выдает.

Подскажите, знающие люди, что я делаю не так?

Сообщение отредактировал BioUnit - Mar 9 2018, 21:23
Go to the top of the page
 
+Quote Post
NoDS
сообщение Mar 13 2018, 07:58
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 30-03-16
Из: Санкт-Петербург
Пользователь №: 91 089



BioUnit, напишите на wireless собака mt-system.ru. Вышлю в ответ актуальный SDK, вполне возможно, что используете устаревшее ПО (судя по дате в названии сборки).
Go to the top of the page
 
+Quote Post

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

 


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


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