Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не получается задействовать SPI на SIM800
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
BioUnit
Здравствуйте.

Имеется 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 ?
Уж больно не хочется писать свою реализацию.

Спасибо!
BioUnit
Вообще, чертовщина какая-то.
Попробовал вместо 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.
Ошибок при этом не выдает.

Подскажите, знающие люди, что я делаю не так?
NoDS
BioUnit, напишите на wireless собака mt-system.ru. Вышлю в ответ актуальный SDK, вполне возможно, что используете устаревшее ПО (судя по дате в названии сборки).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.