Здравствуйте.
Имеется плата с AT91SAM9260. Требуется из линукса работать с SPI. Почитал вот эту тему:
http://www.starterkit.ru/html/index.php?na...iew&id=8139В итоге сделал как там и говорилось: включил поддержку spidev в ядре, подредактировал at91sam9260_devices.c сделав short enable_spi1 = 1.
Ядро загружается, есть строчка atmel_spi atmel_spi.1: Atmel SPI Controller at 0xfffcc000 (irq 13). В каталоге sys/devices есть spidev. В /dev устройств spi нет. Я так понял они должны появиться после запуска модуля.
Нашел пример модуля:
Код
#include <linux/spi/spi.h>
#include <mach/gpio.h>// at91 specific GPIO pins
#define SPI_1_SPEED 1*1000*1000
#define MYCHIP_CS_PIN AT91_PIN_PС5
static struct spi_board_info my_spi_device =
{
.modalias = "myspidev",// имя устройства
.chip_select = 2,// абстрактный номер микросхемы
.bus_num = 1,// номер шины
.max_speed_hz = SPI_1_SPEED,// максимальная скорость подключения
.controller_data = (void *) MYCHIP_CS_PIN,// выбор кристалла
.mode = SPI_MODE_0,// режим работы SPI, поддерживаемый микросхемой
};
static int init_and_send_data(void)
{
static struct spi_device* my_spi_ptr;
int err;
struct spi_master* spi = spi_busnum_to_master( my_spi_device.bus_num );
if( spi == NULL )
{
printk("unable to get spi master %d\n", my_spi_device.bus_num);
return -1;
}
my_spi_ptr = spi_new_device( spi, my_spi_device );
if( my_spi_ptr == NULL )
{
printk("unable to create my spi device\n");
return -1;
}
u8 reg[2];
reg[0] = 0x00<<1;// адрес, обычно младший бит указывает режим чтение/запись
reg[1] = 0x00;// данные
spi_write( my_spi_ptr, reg, sizeof(reg) );
out:
spi_unregister_device(spi_codec);
return err;
}
Насколько я понял данный модуль при инициализации посылает по SPI1 по CS1 2 байта и выгружается.
Проблема возникла с компиляцией. Порылся в интернете но так и не нашел как компилировать модули к ядру с помощью codesourcery (может быть не там/плохо искал).
Собственно скачал Codesourcery for ARM GNU/Linux & IA32 GNU/Linux версии arm-2007q1-22. С помощью нее компилировал ядро, т.е она работает (компилировал не сам задавая значения а скачал пример сборки).
Создал файл myspidev.c. Попробовал откомпилировать так:
arm-none-linux-gnueabi-gcc -mcpu=arm926ej-s myspidev.c -o myspidev
Инклуды указал напрямую, т.е /usr/src/linux-2.6.27/include/linux/spi/spi.h иначе он не хотел их видеть.
В конечном итоге при попытке компиляции выводит множетсво ошибок как в самих инклудах так и в файле модуля.
Я в этом всем новичек и скорее всего делаю все не так как надо. Подскажите пожалуйста как именно нужно компилировать.