Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Отладочные платы » SK-DM8148
SPI
EvgeniyK
Добавлено 06.04.2014 22:30
0
Сообщение: 1
EvgeniyK
0

Пункты: 100
Регистрация: 14.03.2014
Здравствуйте!
Не поможете разобраться с SPI на плате SK-DM8148?

У меня такая задача.

Есть плата SK-DM8148 и есть ПЛИС. Между ними нужно организовать обмен по SPI. Плата - master, а ПЛИС - slave.
ПЛИС подсоединена к плате таким образом:
SPI1_SCK - SCK
SPI1_D0 - MISO
SPI1_D1 - MOSI
SPI1_CS - CS
Конфигурационные биты CPOL=1, CPHA=0; во время передачи пакета сигнал выборки CS должен иметь низкий уровень.

Для этого я написал свой драйвер, общающийся с ПЛИС по SPI и модифицировал board_ti8148evm.c (см. ниже).
Но обмен не идёт - на все команды в ответ я получаю одни 0xFF (сама функция spi_sync() возвращает 0).

Файл board_ti8148evm.c я модифицировал таким образом:
Код
struct spi_board_info __initdata ti8148_spi_slave_info[] = {
/*{
.modalias = "ads7846",
.platform_data = &ads_info,
.max_speed_hz = 100 * 1000,
.bus_num = 1,
.chip_select = 0,
},*/

{
.modalias = "spiPLIS",
.platform_data = NULL,
.max_speed_hz = 100 * 1000,
.bus_num = 1,
.chip_select = 1,
.mode = SPI_MODE_2,
.irq = -1,
},
};

void __init ti8148_spi_init(void)
{
int error;

/*error = gpio_request(TS_PENIRQ, "ads7846_irq");
if (error < 0) {
printk(KERN_ERR "%s: failed to request GPIO for ADS7846 IRQ"
": %d\n", __func__, error);
}

gpio_direction_input(TS_PENIRQ);
ti8148_spi_slave_info[0].irq = gpio_to_irq(TS_PENIRQ);*/

spi_register_board_info(ti8148_spi_slave_info,
ARRAY_SIZE(ti8148_spi_slave_info));
}

Ну а в своём драйвере я отправляю данные по SPI таким образом:
Код
static inline int spi_wr1(struct spi_device *spi, const void *wbuf, void *rbuf, size_t len) {
struct spi_transfer t = {
.tx_buf = wbuf,
.rx_buf = rbuf,
.len = len,
};
struct spi_message m;

spi_message_init(&m);
spi_message_add_tail(&t, &m);
return spi_sync(spi, &m);
}

...

uint8_t sendData[2] = { (0x18 << 1) | 1, 0 }, recvData[2] = {0, 0};
r = spi_wr1(spiDev, sendData, recvData, 2);
printk(KERN_INFO "test r=%d recv=0x%X 0x%X\n", r, recvData[0], recvData[1]);

Я так понимаю, нужно где-то указать, что MISO - это SPI1_D0 и т.д.
Но где это задать?
В spi_board_info вижу только .bus_num и .chip_select...
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 07.04.2014 02:00 Сообщение: 2
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Я так понимаю, нужно где-то указать, что MISO - это SPI1_D0 и т.д.
Но где это задать?
В spi_board_info вижу только .bus_num и .chip_select...

я в 8148 с spi не ковырялся - глянул в файл борды..
если есть возможность, то используйте те пины, которые задействованы для spi1 вместо ads7846 - это контроллер тача и если отсоединить экран, то получите рабочий канал..
и верните в структуре chip_select=0
если есть осциллограф, то проверьте - есть ли какая-нить деятельность в канале при обращение по spi..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
EvgeniyK
Добавлено 19.04.2014 14:59 Сообщение: 3
EvgeniyK
0

Пункты: 100
Регистрация: 14.03.2014
Я разобрался, в общем...

Нужно было в omap2_mcspi.c поменять инициализацию регистров (там указываем MISO и MOSI) и в board-ti8148evm.c установить bus_num=2 (там нумерация с 1, а в документации - с 0).
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 19.04.2014 15:29 Сообщение: 4
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Нужно было в omap2_mcspi.c поменять инициализацию регистров (там указываем MISO и MOSI) и в board-ti8148evm.c установить bus_num=2 (там нумерация с 1, а в документации - с 0).

спасибо, что поделились информацией..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-DM8148