我有一个有点爆炸的代码,它允许我通过 SPI 线发送大约 4 兆的数据。它的嵌入式代码用于使用 Linux 内核的自定义硬件。
问题是这需要很长时间才能完成(4 小时),这很可能是因为内核正在做更多的事情。基本上我的代码是这样的(aprox):
unsigned char data=0xFF;
BB_SPI_Init();
SPI_start();//activates chipselect(enable)
for(i=0;i<8;i++){
if(data & 0x80){
gpio_set_value(SPI_MOSI,1);
}else{
gpio_set_value(SPI_MOSI,0);
}
//send pulse clock
gpio_set_value(SPI_CLK,0);
gpio_set_value(SPI_CLK,1);
data<<=1;
}
SPI_stop();//deactivates chipselect(disable)
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的问题,但我注意到如果我使用 write 将数据发送到 linux gpio 处理程序/sys/class/gpio/gpioXX/value(其中 XX 是任何 gpio 编号),则需要 4 小时。但是,如果我fwrite()用于发送到同一台设备,则需要 3 个小时。但是,如果您write()仅用于启用(SPI_stop()和 SPI_ start())并fwrite()用于发送到 MISO、CLK,它只需要 1 小时 30 分钟。
那么,以此为基础,有人可以向我解释这是怎么发生的吗?我的想象说这是处理线程的方式,并且在每个软件周期中它解析 2 个线程(fwrite()和write()),如果只是使用的函数之一,但现在我仍在调查,有人可以让我知道任何类型的信息? 有没有更好的方法来处理这个问题?
仅供参考 无法使用内核驱动程序 spi,因为硬件已连接到 gpios,使用 bit bang …