Warning: touch() [function.touch]: Unable to create file /home/starterkit/starterkit.ru/html/error.log because Permission denied in /home/starterkit/starterkit.ru/html/errorhandler.php on line 51
SODIMM / SPI - IMX6S - SK - SODIMM - iMX6S/D - SK - Форум - starterkit.ru
Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

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

User Info


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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Процессорные модули » SK-iMX6S/D-SODIMM
SK-IMX6S-SODIMM / SPI
Jury093
Добавлено 25.01.2015 20:07 Редактировалось 25.01.2015 20:08 Сообщение: 11
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Еще есть вопрос, какова максимальная частота шины SPI?

вы в доку то заглядывали? тактирование ECSPI 60МГц - это теоретическая максималка..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
robertstar
Добавлено 25.01.2015 20:22 Сообщение: 12
robertstar
0

Пункты: 1892
Регистрация: 20.04.2013
Пол: Мужчина
Заглядывал, но больше 20 Мгц форма сигнала резко ухудшается,
поэтому и спрашиваю, может кто больше получал.
Спуститься к концу Подняться к началу
Персональная информация
robertstar
Добавлено 25.01.2015 20:25 Сообщение: 13
robertstar
0

Пункты: 1892
Регистрация: 20.04.2013
Пол: Мужчина
Цитата
В документации ядра есть пример

http://lxr.free-electrons.com/source/Documentation/spi/spidev_test.c?v=3.2#L180

там явно устанавливают количество бит в слове через ioctl

180 * bits per word
181 */
182 ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
183 if (ret == -1)
184 pabort("can't set bits per word");
185
186 ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);
187 if (ret == -1)
188 pabort("can't get bits per word");


Спасибо, попробую)
Спуститься к концу Подняться к началу
Персональная информация
robertstar
Добавлено 26.01.2015 13:21 Сообщение: 14
robertstar
0

Пункты: 1892
Регистрация: 20.04.2013
Пол: Мужчина
Добрый день!
Во общем сделал инициализацию:

int Init_SPI0(void)
{
static uint8_t mode;
static uint8_t bits = 32;
mode = SPI_MODE_0;

xfer.rx_buf = (unsigned long)rxBuffer;
xfer.tx_buf = (unsigned long)txBuffer;
xfer.len = 1;
xfer.speed_hz = 5000000;
xfer.cs_change = 0;
xfer.bits_per_word = 32;
xfer.delay_usecs = 2;

spiDev = open(spi_name, O_RDWR);
if (spiDev == -1)
printf("can't open %s !\n",spi_name);
else
printf("open %s successfully !\n",spi_name);

res = ioctl(spiDev, SPI_IOC_WR_MODE, &mode);
if (res == -1)
printf("can't set spi mode\n");
else
printf("spi mode: %d\n", mode);

res = ioctl(spiDev, SPI_IOC_RD_MODE, &mode);
if (res == -1)
printf("can't get spi mode\n");

res = ioctl(spiDev, SPI_IOC_WR_BITS_PER_WORD, &bits);
if (res == -1)
printf("can't set bits per word\n");
else
printf("bits per word: %d\n", bits);

res = ioctl(spiDev, SPI_IOC_RD_BITS_PER_WORD, &bits);
if (res == -1)
printf("can't get bits per word\n");

res = ioctl(spiDev, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
if (res == -1)
printf("can't set max speed hz\n");

res = ioctl(spiDev, SPI_IOC_RD_MAX_SPEED_HZ, &speed);
if (res == -1)
printf("can't get max speed hz\n");
else
printf("max speed: %d Hz (%d KHz)\n", speed, speed/1000);

return 0;
}

При bits = 8, все работает нормально, стоит поменять на 16 или 32
происходит следующее:
# ./imx6-test1
!!!imx6-test1!!!
open /dev/mem successfully !
open /dev/spidev0.0 successfully !
spi mode: 0
bits per word: 32
max speed: 60000000 Hz (60000 KHz)
Unable to handle kernel paging request at virtual address ffffffff
pgd = 80004000
[ffffffff] *pgd=25ffe821, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#1] PREEMPT SMP
Modules linked in: adv7180_tvin g_serial
CPU: 0 Not tainted (3.1.2 #166)
PC is at __run_hrtimer+0x10/0x23c
LR is at hrtimer_interrupt+0x114/0x2ac
pc : [<8009f7f4>] lr : [<800a05c4>] psr: 00000193
sp : 807b1e68 ip : 00000000 fp : 00000001
r10: 807b1eb8 r9 : 7fffffff r8 : ffffffff
r7 : ffffffff r6 : 00000001 r5 : 00000006 r4 : 92827ed8
r3 : ffffffff r2 : ffffffff r1 : 807b1eb8 r0 : 92827ed8
Flags: nzcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 10c53c7d Table: 224e804a DAC: 00000015
Process swapper (pid: 0, stack limit = 0x807b02f0)
Stack: (0x807b1e68 to 0x807b2000)
1e60: 79027a7c 00000006 00000001 8bc06558 ffffffff 7fffffff
1e80: 8bc06520 800a05c4 00000000 00000000 3fb429f0 00000003 79027a7c 00000006
1ea0: ffffffff 7fffffff 79027a7c 00000006 79027a7c 00000006 79027a7c 00000006
1ec0: 00000016 00000001 807b4ccc 00000057 00000057 00000000 8081acf0 00000000
1ee0: 00000000 8006628c 807dad40 800c1548 60000193 807c5f48 8bc06608 807b4c80
1f00: 00000006 807b4c80 807b4ccc 807dad40 00000057 00000000 807b0000 00000000
1f20: 00000000 800c17c0 807b4c80 807b4ccc 00000472 800c3b48 807c5f48 8003cd70
1f40: 807b0000 800c0ea8 00000270 80044350 ffffffff f2a00100 00000057 00000002
1f60: 00000001 805b8e4c 80823420 80000093 00000001 00000000 807b0000 8081be04
1f80: 807c5a70 805c0650 807c98a4 412fc09a 00000000 00000000 00000000 807b1fb0
1fa0: 80052570 800445f8 40000013 ffffffff 800445d4 800447dc 807c5dc4 807b0000
1fc0: 8081bd60 8bc03120 1000406a 8000888c 800082f8 00000000 00000000 80031990
1fe0: 00000000 10c53c7d 807c5a6c 8003198c 807c989c 10008040 00000000 00000000
[<8009f7f4>] (__run_hrtimer+0x10/0x23c) from [<800a05c4>] (hrtimer_interrupt+0x114/0x2ac)
[<800a05c4>] (hrtimer_interrupt+0x114/0x2ac) from [<8006628c>] (mxc_timer_interrupt+0x2c/0x34)
[<8006628c>] (mxc_timer_interrupt+0x2c/0x34) from [<800c1548>] (handle_irq_event_percpu+0x58/0x294)
[<800c1548>] (handle_irq_event_percpu+0x58/0x294) from [<800c17c0>] (handle_irq_event+0x3c/0x5c)
[<800c17c0>] (handle_irq_event+0x3c/0x5c) from [<800c3b48>] (handle_fasteoi_irq+0x98/0x158)
[<800c3b48>] (handle_fasteoi_irq+0x98/0x158) from [<800c0ea8>] (generic_handle_irq+0x20/0x34)
[<800c0ea8>] (generic_handle_irq+0x20/0x34) from [<80044350>] (handle_IRQ+0x4c/0xb0)
[<80044350>] (handle_IRQ+0x4c/0xb0) from [<805b8e4c>] (__irq_svc+0x4c/0xe8)
[<805b8e4c>] (__irq_svc+0x4c/0xe8) from [<800445f8>] (default_idle+0x24/0x28)
[<800445f8>] (default_idle+0x24/0x28) from [<800447dc>] (cpu_idle+0xac/0x120)
[<800447dc>] (cpu_idle+0xac/0x120) from [<8000888c>] (start_kernel+0x268/0x2b0)
[<8000888c>] (start_kernel+0x268/0x2b0) from [<10008040>] (0x10008040)
Code: e92d47f0 e1a04000 e5907024 e1a0a001 (e5978000)
---[ end trace 00f2494a8975e06c ]---
Kernel panic - not syncing: Fatal exception in interrupt
[<8004a9fc>] (unwind_backtrace+0x0/0xf8) from [<805b13ac>] (panic+0x74/0x198)
[<805b13ac>] (panic+0x74/0x198) from [<80047318>] (die+0x22c/0x290)
[<80047318>] (die+0x22c/0x290) from [<805b0608>] (__do_kernel_fault.part.2+0x54/0x74)
[<805b0608>] (__do_kernel_fault.part.2+0x54/0x74) from [<805bb06c>] (do_page_fault+0x1a0/0x380)
[<805bb06c>] (do_page_fault+0x1a0/0x380) from [<8003e374>] (do_DataAbort+0x34/0x9c)
[<8003e374>] (do_DataAbort+0x34/0x9c) from [<805b8dd0>] (__dabt_svc+0x70/0xa0)
Exception stack(0x807b1e20 to 0x807b1e68)
1e20: 92827ed8 807b1eb8 ffffffff ffffffff 92827ed8 00000006 00000001 ffffffff
1e40: ffffffff 7fffffff 807b1eb8 00000001 00000000 807b1e68 800a05c4 8009f7f4
1e60: 00000193 ffffffff
[<805b8dd0>] (__dabt_svc+0x70/0xa0) from [<8009f7f4>] (__run_hrtimer+0x10/0x23c)
[<8009f7f4>] (__run_hrtimer+0x10/0x23c) from [<800a05c4>] (hrtimer_interrupt+0x114/0x2ac)
[<800a05c4>] (hrtimer_interrupt+0x114/0x2ac) from [<8006628c>] (mxc_timer_interrupt+0x2c/0x34)
[<8006628c>] (mxc_timer_interrupt+0x2c/0x34) from [<800c1548>] (handle_irq_event_percpu+0x58/0x294)
[<800c1548>] (handle_irq_event_percpu+0x58/0x294) from [<800c17c0>] (handle_irq_event+0x3c/0x5c)
[<800c17c0>] (handle_irq_event+0x3c/0x5c) from [<800c3b48>] (handle_fasteoi_irq+0x98/0x158)
[<800c3b48>] (handle_fasteoi_irq+0x98/0x158) from [<800c0ea8>] (generic_handle_irq+0x20/0x34)
[<800c0ea8>] (generic_handle_irq+0x20/0x34) from [<80044350>] (handle_IRQ+0x4c/0xb0)
[<80044350>] (handle_IRQ+0x4c/0xb0) from [<805b8e4c>] (__irq_svc+0x4c/0xe8)
[<805b8e4c>] (__irq_svc+0x4c/0xe8) from [<800445f8>] (default_idle+0x24/0x28)
[<800445f8>] (default_idle+0x24/0x28) from [<800447dc>] (cpu_idle+0xac/0x120)
[<800447dc>] (cpu_idle+0xac/0x120) from [<8000888c>] (start_kernel+0x268/0x2b0)
[<8000888c>] (start_kernel+0x268/0x2b0) from [<10008040>] (0x10008040)

По логу видно, что ioctl выставляет 32 бита, но кто все портит не знаю, может кто подскажет?
С уважением Владимир.
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 26.01.2015 15:07 Сообщение: 15
Pavel Ivanchenko
Admin
4.39

Пункты: 91311
Регистрация: 24.03.2009
Пол: Мужчина
Цитата
Заглядывал, но больше 20 Мгц форма сигнала резко ухудшается, поэтому и спрашиваю, может кто больше получал.
Каждый пин имеет настройку выходного тока буфера, она по умолчанию скорее всего "загрублена" ...
Спуститься к концу Подняться к началу
Персональная информация
robertstar
Добавлено 26.01.2015 20:05 Редактировалось 26.01.2015 20:14 Сообщение: 16
robertstar
0

Пункты: 1892
Регистрация: 20.04.2013
Пол: Мужчина
title
Добрый вечер!
Проблему решил, был не внимателен)

static uint8_t mode;
static uint8_t bits = 32;

mode = SPI_MODE_0;

txBuffer[0]=0xA1;
txBuffer[1]=0xB2;
txBuffer[2]=0xC3;
txBuffer[3]=0xD4;

xfer.rx_buf = (unsigned long)rxBuffer;
xfer.tx_buf = (unsigned long)txBuffer;
xfer.len = 4; //длина 4 байта
xfer.speed_hz = 5000000;
xfer.cs_change = 0;
xfer.bits_per_word = 32;
xfer.delay_usecs = 2;

Когда длина xfer.len (байты) не соответствует длине слова (bits_per_word/8 или bits/8),
происходит падение ядра (в логе постом выше описывал).
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Процессорные модули » SK-iMX6S/D-SODIMM