#microchip #spi #spi-driver #embedded-hal-driver #sram

无需std sram23x

适用于23xx系列串行SPI SRAM的平台无关Rust驱动程序

7个不稳定版本 (3个破坏性更新)

0.3.1 2021年2月11日
0.3.0 2021年1月22日
0.2.2 2021年1月17日
0.1.0 2021年1月12日
0.0.0 2021年1月11日

#1493 in 嵌入式开发

每月下载 22

MIT 许可证

23KB
269

Microchip 23x SRAM/NVSRAM嵌入式hal SPI驱动程序

crates.io Docs Maintenance Intention

这是一个基于embedded-hal特质的平台无关Rust驱动程序,用于23x系列串行SRAM/NVSRAM SPI内存芯片

查看介绍帖子

此驱动程序允许您

  • 从内存地址读取单个字节。请参阅:read_byte()
  • 从内存地址开始的32字节页。请参阅:read_page()
  • 从内存地址开始的N字节数组。请参阅:read_sequential()
  • 向内存地址写入单个字节。请参阅:write_byte()
  • 从内存地址开始的32字节页。请参阅:write_page()
  • 从内存地址开始的N字节数组。请参阅:write_sequential()
  • 通过管理HOLD引脚来启用和禁用传输。
  • 获取/设置操作模式/状态寄存器。

阅读API文档以获取更多信息。

支持的设备

设备 内存字节数 内存位数 HOLD引脚 数据手册
M23x640 8 KB 64 Kbit 23A640/23K640
M23x256 32 KB 256 Kbit 23A256/23K256
M23x512 64 KB 512 Kbit 23A512/23LC512
M23xv512 64 KB 512 Kbit 23LCV512
M23x1024 128 KB 1 Mbit 23A1024/23LC1024
M23xv1024 128 KB 1 Mbit 23LCV1024

用法

在您的 Cargo.toml 中将 作为依赖项包含

[dependencies]
sram23x = "0.3.1"

一些示例用法

extern crate sram23x;
use sram23x::*;

fn main() {
    // 1. Ensure spi, cs, and hold pins are defined. hold pin is required (any unused output pin will do)
    // (device specific)

    // 2. Instantiate memory device 23LCV1024
    let mut sram = Sram23x::new(spi, cs, hold, device_type::M23xv1024).unwrap();

    // 3. Check the operating mode register
    println!("Operating mode register: {:?}", sram.mode);

    // 4. Change the operating mode to sequential
    sram.set_mode(OperatingMode::Sequential as u8).unwrap();
    assert_eq!(sram.mode, 0b01);

    // 5. Write 4 bytes of data starting at address 0x00 from a buffer
    let mut data: [u8; 4] = ['t' as u8, 'e' as u8, 's' as u8, 't' as u8];
    sram.write_sequential(0x00_u32, &mut data).unwrap();

    // 6. Read 4 bytes of data starting at address 0x00 into a buffer
    sram.read_sequential(0x00_u32, &mut data).unwrap();
    println!("Read data: {:?}", data);
    assert_eq!(data[0], 't' as u8);
    assert_eq!(data[1], 'e' as u8);
    assert_eq!(data[2], 's' as u8);
    assert_eq!(data[3], 't' as u8);

    // 7. Write and read 1 byte to/from address 0x04
    sram.set_mode(OperatingMode::Byte as u8).unwrap();
    assert_eq!(sram.mode, 0b00);
    sram.write_byte(0x04_u32, 'a' as u8).unwrap();
    let byte = sram.read_byte(0x04_u32).unwrap();
    println!("Read 1 byte: {:?}", byte);
    assert_eq!(byte, 'a' as u8);

    // 8. Write and read a 32-byte page starting at address 0x00
    sram.set_mode(OperatingMode::Page as u8).unwrap();
    assert_eq!(sram.mode, 0b10);
    let mut data = "Microchip\n1Mbit serial\nsram test".as_bytes();
    sram.write_page(0x00_u32, data).unwrap();
    let page = sram.read_page(0x00_u32).unwrap();
    println!("Read a 32-byte page: {:?}", page);
    assert_eq!(page[0], 'M' as u8);
    assert_eq!(page[31], 't' as u8);
}

待办事项

  • 将 I/O 分离成它们自己的私有函数
  • 添加测试
  • 记录其他缺失的细节

贡献

如果您发现任何错误或问题,请 创建一个问题

许可证

MIT 许可证

版权所有(c)2021 Alexander Williams,On-Prem [email protected]

依赖项

~100KB