日期:2014-05-16  浏览次数:20726 次

linux spi写数据,但是示波器检测不到(求高手解答)
我的spi驱动代码如下:
#include <linux/completion.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <linux/slab.h>
#include <linux/uaccess.h>
#include <linux/input.h>
#include <linux/device.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/spi/spi.h>
#include <linux/module.h>
#include <linux/timer.h>
#include <linux/param.h>
#include <linux/jiffies.h>
#include "nn1001.h"
MODULE_LICENSE("Dual BSD/GPL");
const char send_data[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
static int count;
struct timer_list nn1001_timer;
struct nn1001_bus_ops *ops;
struct spi_device *nn1001_spi;
struct mutex nn1001_lock;
write1(struct spi_device *spi, const void *buf, size_t len)
{
printk(KERN_ALERT "------enter write1---------\n");
struct spi_transfer t = {
.tx_buf = buf,
.len = len,
};
struct spi_message m;
spi_message_init(&m);
printk(KERN_ALERT "------add spi_transfer to spi_message-------\n");
spi_message_add_tail(&t, &m);
printk(KERN_ALERT "------spi_sync---------\n");
return spi_sync(spi, &m);

}
static void nn1001_timeout_function(unsigned long arg)
{
printk(KERN_ALERT "------enter timeout function count:%d------",count);
count++;
mutex_lock(&nn1001_lock);
printk(KERN_ALERT "send_data is :%d,%d,%d\n",send_data[0],send_data[1],send_data[2]);
write1(nn1001_spi,send_data,16);
//spi_write(nn1001_spi,send_data,16);
mutex_unlock(&nn1001_lock);
printk(KERN_ALERT "spi write end !");
mod_timer(&nn1001_timer, jiffies+HZ);
//add_timer(&nn1001_timer);
}
static int __devinit nn1001_probe(struct spi_device *spi)
{
printk(KERN_ALERT "enter nn1001 probe function \n");
nn1001_spi = spi;
mutex_init(&nn1001_lock);
struct nn1001_platform_data *pdata = nn1001_spi->dev.platform_data;
if (pdata->power_enable)
{
printk(KERN_ALERT "enter power_enable \n");
pdata->power_enable(1);
}
/* Call out to platform specific setup */
if (pdata->board_specific_setup)
{
printk(KERN_ALERT "enter board_specific_setup\n");
pdata->board_specific_setup(spi);
}
nn1001_spi->mode = SPI_MODE_0;
nn1001_spi->bits_per_word = 8;
printk(KERN_ALERT "start setup spi");
spi_setup(nn1001_spi);

init_timer(&nn1001_timer);
nn1001_timer.expires = jiffies + 2*HZ;
nn1001_timer.data = 123;
nn1001_timer.function = nn1001_timeout_function;
printk(KERN_ALERT "init timer end\n");
add_timer(&nn1001_timer);
printk(KERN_ALERT "add timer end \n");

}
static const struct spi_device_id nn1001_id_table[] = {
{ "nn1001", SPI_NN1001},
{ },
};

MODULE_DEVICE_TABLE(spi, nn1001_id_table);

static struct spi_driver nn