frankzcj
驱动牛犊
驱动牛犊
  • 注册日期2007-07-26
  • 最后登录2010-01-17
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望34点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:4334回复:11

SMBus Driver求助

楼主#
更多 发布于:2008-07-23 20:05
我想开发一个Windows下面的SMBus Driver.[芯片为飞利浦的SC16IS750,SMBus转UART的一款接口芯片]。
以前未接触过SMBus Client Driver,想找个例子看看,找了好久都没找到。
只找到一篇文档"SMBus Device Driver External Architecture Specification" ,但是帮助不大,对于如何写SMBus Client Driver的DriverEntry,AddDevice等例程还是一无所知。
想请教有SMBus 驱动开发经验的大侠能否提供些帮助或建议。[关于SMBus Client Driver的例子信息以及如何写SMBus Client  Driver]

不胜感激!
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-07-24 09:55
协议方面参考哪个规范就可以了,比如Host Address 是 8等等.
驱动编写可以参考DDK帮助,虽然简单点,但也基本说清楚了(当然并没有涉及到具体协议)
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
frankzcj
驱动牛犊
驱动牛犊
  • 注册日期2007-07-26
  • 最后登录2010-01-17
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望34点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-07-24 14:55
谢谢AllenZh .

不过还是困惑,关于SMBus Client Driver的例子信息你能提供么?
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-07-24 16:39
参考代码不方便提供,其实代码框架不复杂,参考下“System Management Bus Driver Clients ”部分就差不多了,具体你要处理什么命令和你的需求有关系。下面是DDK帮助的说明,非常清楚。
SMB clients must supply the following standard driver routines:
A DriverEntry routine to initialize the client
An AddDevice routine to initialize the device
An Unload routine to remove the client
One or more Dispatch routines to handle the following types of IRPs:
IRP_MJ_CREATE
IRP_MJ_CLOSE
IRP_MJ_DEVICE_CONTROL
IRP_MJ_PNP
IRP_MJ_POWER
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
frankzcj
驱动牛犊
驱动牛犊
  • 注册日期2007-07-26
  • 最后登录2010-01-17
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望34点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-07-25 11:38
谢了。

DriverEntry,AddDevice,Unload例程倒还能参考PCI,USB的sample凑合写下。
IRP_MJ_CREATE ,IRP_MJ_CLOSE, IRP_MJ_DEVICE_CONTROL 则比较茫然。
另:
主要是将UART产生的命令码通过SMBus总线发到主机,以及主机通过SMBus配置UART。
Linux下倒省事,内核函数i2c_smbus_read_byte_data,i2c_smbus_write_byte_data搞定。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-07-28 09:15
重点是 IRP_MJ_DEVICE_CONTROL 中处理
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
frankzcj
驱动牛犊
驱动牛犊
  • 注册日期2007-07-26
  • 最后登录2010-01-17
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望34点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-07-30 21:50
AllenZh ,你好!能否提供下你的邮箱?
我还有3个疑问:
1 我用DriverStudio作此驱动,在使用DriverWizard时选总线类型时并没有smbus,是否选"Other"?Hardware ID怎样找到,能否提供下INF样例做参考?
2 Open device是否可以采用 by Interface方法?
3 PCI设备访问寄存器是将base映射到主机地址空间,然后加上地址偏移即可访问相应的寄存器。请问 smbus cliet driver要如何操作才能访问寄存器?

望不吝赐教,谢谢!
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-08-01 12:54
1,我通常不使用DriverStudio,你可以按你说的测试下.
2,没有太理解你的意思
3,发送SMB_REQUEST包应该就可以了,可能不同类型的驱动有些细节差别
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-08-01 12:54
你可以msn联系我 : mfczmh@sina.com
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
frankzcj
驱动牛犊
驱动牛犊
  • 注册日期2007-07-26
  • 最后登录2010-01-17
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望34点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-08-01 13:57
好的,谢谢了。
2 即是说: 在应用程序中打开smbus 设备是否可以采用 GUID接口方式即 OpenByInterface函数。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2008-08-01 16:58
这个和你使用什么方式创建Symbol有关系
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
frankzcj
驱动牛犊
驱动牛犊
  • 注册日期2007-07-26
  • 最后登录2010-01-17
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望34点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2008-08-04 15:36
好的,谢了。我看了些规范,SMB_REQUEST的结构定义如下:

#define  SMB_MAX_DATA_SIZE   32

struct   SMB_REQUEST
{
     BYTE  Status;
     BYTE  Protocol;
     BYTE  Address;
     BYTE Command;
     BYTE BlockLength;
     BYTE Data[SMB_MAX_DATA_SIZE] ;
};


有两个问题:
1 对UART寄存器的读写通过发送SMB_REQUEST包,即每次读写均进行IOCTL。
  此时SMB_REQUEST中 Address是否为寄存器的地址?
  例如IER则Address填写0x01。
2 SC16IS750 Datasheet中提到"Receive Holding Register(RHR) is actually a 64-byte FIFO",请问读取RHR寄存
  器的内容是否即读取了 FIFO中的内容。
游客

返回顶部