CH347SPI_Init()函数里可以对CS的属性进行设置。手册里又提供了CH347SPI_SetChipSelect()其参数几乎与CH347SPI_Init()函数里对CS的设置一模一样。然后又提供了CH347SPI_ChangeCS()函数可以用于修改CS。最后在读写函数里又有iChipSelect 进行片选控制。
应用开发手册里没说4个地方对CS控制有什么不同,想请教下这4个使用上有什么区别
另为了搞懂这个我尝试读了ch347demo程序的VC代码发现几处错误
1)在SpilicDebug.cpp文件CH347InitSpi()函数中根据GUI界面的选项进行初始化。其中有一行
SpiCfg.iIsAutoDeativeCS = (IsDlgButtonChecked(SpiI2cGpioDebugHwnd,IDC_AutoDeativeCS)==BST_CHECKED);
这里IDC_AutoDeativeCS 这个勾选在GUI界面上并没有(或者放了被隐藏了,反正我是没找到)也就是这里SpiCfg.iIsAutoDeativeCS一定是=0用户控制不了
2)手册对CH347SPI_SetChipSelect()函数中的iIsAutoDeativeCS参数描述
ULONG iIsAutoDeativeCS 低16 位为CS1,高16 位为CS2; 操作完成后是否自动撤消片选
demo程序SpilicDebug.cpp文件CH347SpiCsCtrl()函数里调用CH347SPI_SetChipSelect()的时候给的参数
USHORT iIsAutoDeativeCS; // 低八位为CS1,高八位为CS2;操作完成后是否自动撤消片选
这里手册为32bit long,程序为16bit short对不上
3)同样在SpilicDebug.cpp文件CH347SpiCsCtrl()函数里下面几句
ULONG iActiveDelay; // 低八位为CS1,高八位为CS2;设置片选后执行读写操作的延时时间
ULONG iDelayDeactive; // 低八位为CS1,高八位为CS2;撤消片选后执行读写操作的延时时间
这里注释不对,应该是高16bit和底16bit分别为CS1和CS2的延迟
4)CH347SPI_SetChipSelect()函数手册里对iEnableSelect参数的描述:
“iEnableSelect: 低八位为CS1,高八位为CS2;字节值为0= 设置CS, 为1= 忽略此CS 设置”
但在程序SpilicDebug.cpp文件CH347SpiCsCtrl()函数里看到
CS=2的时候 iEnableSelect = 0x0100; CS=1的时候iEnableSelect = 0x01;这里似乎是为1的时候设置。与手册里描述的是反的。