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