找回密码
 立即注册
查看: 117|回复: 2

能不能用AI8H8K64U芯片的硬件SPI操作93C66的读写

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-07-06 23:27:42

15

主题

98

回帖

661

积分

高级会员

积分
661
发表于 2025-7-6 23:27:42 | 显示全部楼层 |阅读模式
研究了一下93C66,它的SPI格式好像不是固定的8位格式,用8H8K的硬件SPI如何操作对它的读和写?

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:514
  • 最近打卡:2025-08-01 07:33:38
已绑定手机

87

主题

5791

回帖

1万

积分

超级版主

DebugLab

积分
10398
发表于 2025-7-7 09:46:00 | 显示全部楼层
没有使用过93C66,以下内容来自人工智能生成:

使用AI8H8K64U芯片硬件SPI操作93C66存储器
93C66存储器SPI接口特性分析
93C66是一款4Kbit(512×8)的串行EEPROM存储器,采用SPI接口进行通信6,7。根据规格书,93C66的SPI接口有以下特点:
  • 非标准SPI格式​:93C66的指令格式不是固定的8位格式,而是采用9位指令结构4。指令格式通常为:
    • 起始位(1)
    • 操作码(2位)
    • 地址(6位或7位,取决于存储器组织方式)
  • 存储器组织​:93C66可以配置为x8或x16组织方式,通过ORG引脚设置6。在x8模式下,地址为7位;在x16模式下,地址为6位。
  • 时钟频率​:最大支持2MHz时钟频率6
  • 工作电压​:4.5V~5.5V6
  • 写保护​:具有写保护功能,需要通过特定指令序列才能进行写操作4
AI8H8K64U硬件SPI适配方案
根据搜索结果,AI8H8K64U芯片的SPI接口在使用时需要注意时钟频率设置。测试表明,当SPI时钟频率设置为系统时钟的一半时,可能无法正确读写外设,需要降低到系统时钟的四分之一以下才能稳定工作9
硬件SPI配置要点
  • 时钟频率设置​:
    • 系统时钟为45MHz时,SPI时钟应设置为≤11.25MHz(45MHz/4)
    • 考虑到93C66最大支持2MHz,建议初始设置为1MHz左右6,9
  • 数据位宽设置​:
    • 虽然93C66使用9位指令格式,但AI8H8K64U的SPI硬件支持3-16位可配置数据位宽10
    • 可以采用8位传输模式,分多次传输完成9位指令
  • 模式设置​:
    • 需要根据93C66的时序要求设置CPOL和CPHA
    • 通常93C66在时钟上升沿采样数据,下降沿输出数据4
  • 片选控制​:
    • 需要使用单独的GPIO控制93C66的CS引脚
    • 在每次传输前拉低CS,传输完成后拉高11
读写操作实现方法写操作流程
  • 发送写使能指令(WREN)
  • 发送写指令(包含地址和数据)
  • 等待写完成(可以通过轮询状态寄存器或固定延时)
// 伪代码示例void write_93c66(uint16_t addr, uint8_t data) {    // 写使能    spi_cs_low();    spi_transfer(0x06); // WREN指令    spi_cs_high();        // 写操作    spi_cs_low();    spi_transfer(0x05); // WRITE指令高字节(包含起始位和操作码)    spi_transfer(addr); // 地址    spi_transfer(data); // 数据    spi_cs_high();        // 等待写完成    while(read_status() & 0x01); // 检查BUSY位}读操作流程
  • 发送读指令(包含地址)
  • 接收数据
// 伪代码示例uint8_t read_93c66(uint16_t addr) {    uint8_t data;        spi_cs_low();    spi_transfer(0x03); // READ指令高字节    spi_transfer(addr); // 地址    data = spi_transfer(0x00); // 读取数据    spi_cs_high();        return data;}状态寄存器读取// 伪代码示例uint8_t read_status(void) {    uint8_t status;        spi_cs_low();    spi_transfer(0x05); // RDSR指令    status = spi_transfer(0x00); // 读取状态    spi_cs_high();        return status;}注意事项
  • 指令格式处理​:由于93C66使用9位指令,而硬件SPI通常以8位为单位传输,需要将指令拆分处理4,6
  • 时钟相位和极性​:必须确保AI8H8K64U的SPI模式与93C66要求的时序匹配11
  • 写保护​:写操作前必须先发送写使能指令(WREN),且每次写操作后写使能会自动复位4
  • 延时处理​:93C66的写周期时间典型值为2ms6,在写操作后需要适当延时或轮询状态寄存器。
  • 电源电压​:确保AI8H8K64U的IO电平与93C66的电压要求(4.5V-5.5V)兼容6
调试建议
  • 初始调试时,建议使用较低的SPI时钟频率(如100kHz)9
  • 先实现状态寄存器读取功能,验证基本通信是否正常
  • 使用逻辑分析仪或示波器观察SPI时序,确保符合93C66的要求11
  • 参考已有的93C46驱动代码(93C66的兼容型号),进行适当修改4
通过以上方法,AI8H8K64U的硬件SPI可以有效地实现对93C66存储器的读写操作,尽管需要特别注意其非标准的9位指令格式。在实际实现中,可能需要结合硬件SPI和少量位操作来完成完整的指令传输。


DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:514
  • 最近打卡:2025-08-01 07:33:38
已绑定手机

87

主题

5791

回帖

1万

积分

超级版主

DebugLab

积分
10398
发表于 2025-7-7 12:39:36 | 显示全部楼层
需要发送9位的话可以尝试硬件发完8位后软件发1位
DebugLab
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-1 20:16 , Processed in 0.123311 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表