Ник:
Пароль:

Контакты

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

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

User Info


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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Процессорные модули » SK-iMX53-OEM
imx536 - аппаратный SPI в режиме мастера
buletz
Добавлено 18.02.2013 14:06 Редактировалось 18.02.2013 14:09
0
Сообщение: 1
buletz
3

Пункты: 5920
Регистрация: 16.11.2011
Пол: Мужчина
Есть задача читать данные с SPI устройства. При этом наш хост (imx536) должен работать в режиме аппаратного SPI, т.к. софтварный съест больно много ресурсов.

Пытаюсь сконфигурить SPI, в частности ECSPI2, через запись в соответствующие регистры (ECSPI2_CONREG и др.).
ПРОБЛЕМА:
Проблема в том, что на ногах проца никакого отклика на мои действия с регистрами нет. Т.е. ноги на разъеме X4 висят все время в одном состоянии.
Вот что пишу в регистры:
http://pastebin.com/raw.php?i=1XppNdSS

Тестовую передачу данных делаю через запись в TXDATA регистр:
*(int*)(spi_base+ECSPI2_TXDATA) = 0xAABBCCDD;

Смотрю вот эти ноги разъема X4:
pin 35 - ECSPI2_SS0
pin 37 - ECSPI2_SCLK
pin 38 - ECSPI2_MOSI
pin 40 - ECSPI2_MISO

В ядре я сконфигурил, чтобы ноги были в режиме ECSPI2, а именно, в файле \..\mach-mx5\mx53_loco.c^
Код

static iomux_v3_cfg_t mx53_loco_pads[] = {
...
MX53_PAD_GPIO_3__GPIO1_3,
MX53_PAD_CSI0_DAT11__ECSPI2_SS0, // GPIO5_29,
MX53_PAD_CSI0_DAT8__ECSPI2_SCLK, // GPIO5_26,
MX53_PAD_CSI0_DAT9__ECSPI2_MOSI, // GPIO5_27,
MX53_PAD_CSI0_DAT10__ECSPI2_MISO, // GPIO5_28,
....
}


Мануал от фрискейла на проц достаточно скудный по части SPI, поэтому надеюсь на помощь общественности.
Спуститься к концу Подняться к началу
Персональная информация
sysel
Добавлено 18.02.2013 16:09 Сообщение: 2
sysel
0

Пункты: 519
Регистрация: 04.03.2011
ECPSI без "пинка" сразу данные выплёвывать не хочет.
Попробуйте после записи в ФИФО (ECSPIx_TXDATA) форсировать передачу записью бита XCH в регистре ECSPIx_CONREG.
Или же единожды установите бит SMC в регистре ECSPIx_CONREG.
Спуститься к концу Подняться к началу
Персональная информация
buletz
Добавлено 19.02.2013 13:31 Сообщение: 3
buletz
3

Пункты: 5920
Регистрация: 16.11.2011
Пол: Мужчина
SMC бит я выставляю в единицу, поэтому SPI должен без пинка выдавать данные:
Код
*(int*)(spi_base+ECSPI2_CONREG) |= (1<<4) | (1<<3) ; // channel 0 - master
// CONREG: 19-18 : 00=channel 0 select (SS0),
// 7-4 : CHANNEL MODE 0-slave/1-master, [3]-channel 3... [0]-channel 0
// 3: SMC - immediately starts SPI burst when data is written to TXFIFO


Может быть проблема в том, что надо CLK для SPI как-то активировать ?
У проца есть целый блок CCM (Clock Control Module), отвечающий за управление клоками и он конфигурится из ядра. В ядре я нашел пару строк на этот счет:

/arch/arm/mach-mx5/clock.c

Код
int __init mx53_clocks_init(unsigned long ckil, unsigned long osc, unsigned long ckih1, unsigned long ckih2)
{
...
/* move cspi to 24MHz */
clk_set_parent(&cspi_main_clk, &lp_apm_clk);
clk_set_rate(&cspi_main_clk, 12000000);
....
}



этого достаточно чтоб клок был включен для SPI ?
или еще где-то надо править?
Спуститься к концу Подняться к началу
Персональная информация
buletz
Добавлено 20.02.2013 19:04 Редактировалось 20.02.2013 19:09 Сообщение: 4
buletz
3

Пункты: 5920
Регистрация: 16.11.2011
Пол: Мужчина
Ура! Аппаратный SPI мастер на ECSPI-2 задышал!
Ключевой оказалась фраза из мануала:

24.3.4 Low Power Modes
The ECSPI does not operate under low power mode. It holds its operation when its clock is gated off in master mode. In slave mode, the ECSPI does not respond when its clock is gated off.


Чтобы включить клок залез в
/arch/arm/mach-mx5/clock.c
в функцию mx53_clocks_init(...) в тело добавил вызов одной процедурки:
Код
clk_enable(&cspi2_clk);


Теперь в регистрах ECSPI-2 есть активность, данные гоняются через FIFO. В тестовом режиме включил лупбек и теперь все что пишу в TXDATA вижу в RXDATA.

Далее предстоит настроить DMA и все это перевести в слейв режим (из-за чего собственно весь сырбор, ведь линукс не умеет SPI слейв)....
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Процессорные модули » SK-iMX53-OEM