晚上跟踪 了下spi_test.c,数据的传送流程大概是这样的:
transfer()(spidev_test.c)-->
ioctl()(spidev_test.c)-->
spidev_ioctl()(spidev_test.c)--->
spidev_message()(spidev.c)--->
spidev_sync()(spidev.c)--->
spi_async(spi.h)--通过调用
spi->master->transfer(spi ,message)
调用--->spi_bitbang_transfer()(spi_bitbang.c)--->
bitbang_work()(spi_bitbang.c)--
通过status=bitbang->txrx_buf()
调用---->sep4020_spi_txrx()具体的传数据,其实是 sep4020_spi_txrx()(spi_sep4020.c)与sep4020_spi_txrx()(spi_sep4020.c)共同实现的,通过硬件上的中断触发,完成了数据的传送
spidev_message()函数:
1:把用户空间的数据传进buf;
2:通过spidev_sync()函数一级级调用,来传输数据
3:把buf中的数据在送到用户空间中,通过终端显示
以下是代码运行a.out跟踪代码
# mount all...........
mount: mounting none on /proc/bus/usb failed: No such file or directory
# Starting mdev.........
starting pid 358, tty '': '-/bin/sh'
hwclock: can't open '/dev/misc/rtc': No such file or directory
mkdir: cannot create directory '/var/run': File exists
/ # ./a.out
after the open-----------------------------------
we have enter the iocontl*****************
we have enter the iocontl*****************
<7>spidev spi0.0: before the setup---------1-------
<7>spidev spi0.0: ---********we enter the sep4020_soi