通过有32根数据线的总线使用ioread8只读取8位数据,总线是如何做到只传输8位数据的?

lisency 2014-06-08 09:09:47
仔细研究了一下,现代PC机内用的DDR3内存都只有8根数据线,也就是说我们在C语言当中使用char、short、int分别在内存当中存取数据依次会读1次、2次和4次。
但是现在假若通过PCI总线传输数据呢?
PCI总线是32位的,我要与插在PCI总线上的CAN卡通信,我分别调用ioread8、ioread16、ioread32读取数据,是否总线每次都返回32位的数据呢?如果不是,那么总线是如何控制的?假若我调用了ioread8读取8位数据,但是我们只通过总线传输过去了地址信息并没有说我们只要8位数据,这时候总线岂不是乱了?因为PCI总线另一端的CAN卡不知道你要8位还是32位数据。

求解答
...全文
1261 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lisency 2014-06-09
  • 打赏
  • 举报
回复
引用 2 楼 senioryzc 的回复:
DDR3内存都只有8根数据线, 4个并联起来不就32bit了 32位cpu一次可以读取32bit的数据,内存单元不可能笨到分4次去读,然后再一次返回给cpu 每次读的都是32bit数据,你程序里再处理下,只返回其中你需要的8bit
也就是说 movb movw movl 这3个指令 向内存读取数据的时候其实都是读了32位?只是CPU取了其中的特定位?
senioryzc 2014-06-09
  • 打赏
  • 举报
回复
DDR3内存都只有8根数据线, 4个并联起来不就32bit了 32位cpu一次可以读取32bit的数据,内存单元不可能笨到分4次去读,然后再一次返回给cpu 每次读的都是32bit数据,你程序里再处理下,只返回其中你需要的8bit
inurlcn 2014-06-09
  • 打赏
  • 举报
回复
有可能, 只接8个管脚,其他的管脚悬空

1,025

社区成员

发帖
与我相关
我的任务
社区描述
Linux /Unix kernel支持不同的硬件体系,X86, ARM, MIPS, 等等
社区管理员
  • CPU和硬件区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧