- ้กน็ฎ็ฎไป
- ๅ่ฝ็นๆง
- ๅฟซ้ๅผๅง
- ้กน็ฎ็ปๆ
- API ๆๆกฃ
- ไฝฟ็จ็คบไพ
- ๆต่ฏ็ปๆ
- ๅผๅๆฟๆฏๆ
- ๆ ้ๆ้ค
- ่ฎธๅฏ่ฏ
SD/MMC ้ฉฑๅจๅบๆฏไธไธชไธไธบ ARM64 ๅนณๅฐ่ฎพ่ฎก็ Rust SD/MMC ๆงๅถๅจ้ฉฑๅจๅบ๏ผๆฏๆ eMMCใSD ๅ SDIO ่ฎพๅคใ่ฏฅๅบๆไพไบๅฎๆด็ๅญๅจๆงๅถๅจๅ่ฝ๏ผๅ ๆฌๅฝไปคๅ้ใๆถ้้ ็ฝฎใๅ่ฏปๅๆไฝ็ญใ
ๆฌ้กน็ฎ้็จ no_std ่ฎพ่ฎก๏ผๅฎๅ
จ้็จไบ่ฃธๆบๅๅตๅ
ฅๅผ็ฏๅข๏ผ็นๅซ้ๅฏน U-Boot ๅผๅฏผๅ ่ฝฝ็จๅบ็ฏๅข่ฟ่กไบไผๅใ้่ฟ็ฑปๅๅฎๅ
จ็ๅฏๅญๅจ่ฎฟ้ฎ๏ผ็กฎไฟไบ็กฌไปถๆไฝ็ๅฏ้ ๆงๅๅฎๅ
จๆงใ
- ๐ง ๅฎๆด็ MMC/eMMC ๆฏๆ: ๆฏๆ eMMC 4.x/5.x ๆ ๅ๏ผๅ ๆฌ้ซ้ๆจกๅผใDDR ๆจกๅผใHS200 ๅ HS400 ๆจกๅผ
- ๐ณ SD/SDIO ๆฏๆ: ๆฏๆ SD 1.0/2.0 ๆ ๅๅ SDIO ่ฎพๅค
- ๐ ๅค็งๆฐๆฎไผ ่พๆจกๅผ: ๆฏๆ PIO ๅ DMA ไธค็งๆฐๆฎไผ ่พๆจกๅผ
- ๐ Rockchip ๅนณๅฐไผๅ: ้ๅฏน RK3568 ๅนณๅฐ่ฟ่กไบไธ้จไผๅ๏ผๆฏๆ DWCMSHC ๆงๅถๅจ
- ๐ ็ฑปๅๅฎๅ จๅฏๅญๅจ่ฎฟ้ฎ: ๅบไบ็ดๆฅๅ ๅญ่ฎฟ้ฎๆไพ็ฑปๅๅฎๅ จ็็กฌไปถๅฏๅญๅจๆไฝ
- ๐ฆ no_std ๅ ผๅฎน: ๅฎๅ จไธไพ่ตๆ ๅๅบ๏ผ้็จไบ่ฃธๆบๅๅตๅ ฅๅผ็ฏๅข
- โก ARM64 ๆถๆไผๅ: ไธ้จ้ๅฏน ARM64 ๅนณๅฐ่ฟ่กไผๅ
- ๐ฅ U-Boot ็ฏๅขๆฏๆ: ๅจ U-Boot ๅผๅฏผ็ฏๅขไธๆไพ็จณๅฎๅฏ้ ็ๅญๅจ่ฎฟ้ฎๅ่ฝ
- Rust 2024 Edition
- ARM64 ๅผๅ็ฏๅข
- ๆฏๆ U-Boot ็ Rockchip RK3568 ็กฌไปถๅนณๅฐ
- ostool ๅทฅๅ ท (็จไบๆต่ฏ)
- ๅฎ่ฃ
ostoolไพ่ตๅทฅๅ ท๏ผ
cargo install ostool- ๅฐ้กน็ฎๆทปๅ ๅฐ
Cargo.toml๏ผ
[dependencies]
sdmmc = { git = "https://github.com/drivercraft/sdmmc.git" }use sdmmc::emmc::EMmcHost;
use core::ptr::NonNull;
// ๅๅปบ EMMC ๆงๅถๅจๅฎไพ
let emmc_addr = 0xfe2e0000; // RK3568 EMMC ๆงๅถๅจๅบๅฐๅ
let mut emmc = EMmcHost::new(emmc_addr);
// ๅๅงๅๆงๅถๅจๅๅญๅจๅก
match emmc.init() {
Ok(_) => {
println!("EMMC ๅๅงๅๆๅ");
// ่ฏปๅๅญๅจๅกไฟกๆฏ
match emmc.get_card_info() {
Ok(card_info) => {
println!("ๅก็ฑปๅ: {:?}", card_info.card_type);
println!("ๅฎน้: {} MB", card_info.capacity_bytes / (1024 * 1024));
}
Err(e) => println!("่ทๅๅกไฟกๆฏๅคฑ่ดฅ: {:?}", e),
}
// ่ฏปๅๆฐๆฎๅ
let mut buffer: [u8; 512] = [0; 512];
match emmc.read_blocks(0, 1, &mut buffer) {
Ok(_) => println!("่ฏปๅๆฐๆฎๅๆๅ"),
Err(e) => println!("่ฏปๅๆฐๆฎๅๅคฑ่ดฅ: {:?}", e),
}
}
Err(e) => println!("EMMC ๅๅงๅๅคฑ่ดฅ: {:?}", e),
}src/
โโโ lib.rs # ไธปๅ
ฅๅฃๅๆ ธๅฟๅ่ฝ
โโโ err.rs # ้่ฏฏ็ฑปๅๅฎไน
โโโ emmc/
โโโ mod.rs # EMMC ๆจกๅไธปๆไปถ
โโโ cmd.rs # ๅฝไปคๅ้ๅๅๅบๅค็
โโโ block.rs # ๅ่ฏปๅๆไฝ
โโโ regs.rs # ๅฏๅญๅจ่ฎฟ้ฎๆฅๅฃ
โโโ constant.rs # ็กฌไปถๅธธ้ๅฎไน
โโโ clock.rs # ๆถ้ๆงๅถๆฅๅฃ
โโโ rockchip.rs # Rockchip ๅนณๅฐ็นๅฎๅฎ็ฐ
โโโ config.rs # ๅนณๅฐ้
็ฝฎ
โโโ aux.rs # ่พ
ๅฉๅฝๆฐ
โโโ info.rs # ๅกไฟกๆฏๅค็
tests/
โโโ test.rs # ้ๆๆต่ฏ๏ผๅ
ๅซ EMMC ๅ่ฝๆต่ฏ
| ็ปๆไฝ | ๆ่ฟฐ |
|---|---|
EMmcHost |
ไธป่ฆ็ EMMC ๆงๅถๅจๆฅๅฃ็ปๆไฝ๏ผๆไพๆๆๅญๅจๆงๅถๅ่ฝ |
EMmcCard |
ๅญๅจๅกไฟกๆฏ็ปๆไฝ๏ผๅ ๅซๅก็่ฏฆ็ปไฟกๆฏ |
| ๆนๆณ | ๆ่ฟฐ |
|---|---|
EMmcHost::new(addr) |
ๅๅปบๆฐ็ EMMC ๆงๅถๅจๅฎไพ |
EMmcHost::init() |
ๅๅงๅ EMMC ๆงๅถๅจๅๅญๅจๅก |
EMmcHost::get_card_info() |
่ทๅๅญๅจๅกไฟกๆฏ |
EMmcHost::get_status() |
่ทๅๆงๅถๅจ็ถๆ |
| ๆนๆณ | ๆ่ฟฐ |
|---|---|
EMmcHost::read_blocks(block_id, blocks, buffer) |
่ฏปๅๆฐๆฎๅ |
EMmcHost::write_blocks(block_id, blocks, buffer) |
ๅๅ ฅๆฐๆฎๅ |
| ๆนๆณ | ๆ่ฟฐ |
|---|---|
EMmcHost::mmc_set_clock(freq) |
่ฎพ็ฝฎๆถ้้ข็ |
EMmcHost::mmc_set_bus_width(width) |
่ฎพ็ฝฎๆป็บฟๅฎฝๅบฆ |
EMmcHost::mmc_set_timing(timing) |
่ฎพ็ฝฎๆถๅบๆจกๅผ |
| ๆจกๅผ | ๆ่ฟฐ |
|---|---|
| PIO ๆจกๅผ | ้ป่ฎคๅฏ็จ๏ผ้็จไบๅฐๆฐๆฎ้ไผ ่พ |
| DMA ๆจกๅผ | ้่ฟ dma feature ๅฏ็จ๏ผ้็จไบๅคงๆฐๆฎ้ไผ ่พ |
use sdmmc::emmc::EMmcHost;
use core::ptr::NonNull;
fn init_emmc_controller(emmc_addr: usize) -> Result<(), &'static str> {
// ๅๅปบ EMMC ๆงๅถๅจๅฎไพ
let mut emmc = EMmcHost::new(emmc_addr);
// ๅๅงๅๆงๅถๅจ
match emmc.init() {
Ok(_) => {
println!("EMMC ๆงๅถๅจๅๅงๅๆๅ");
// ่ทๅๅกไฟกๆฏ
match emmc.get_card_info() {
Ok(card_info) => {
println!("ๅก็ฑปๅ: {:?}", card_info.card_type);
println!("ๅถ้ ๅ ID: 0x{:02X}", card_info.manufacturer_id);
println!("ๅฎน้: {} MB", card_info.capacity_bytes / (1024 * 1024));
println!("ๅๅคงๅฐ: {} ๅญ่", card_info.block_size);
}
Err(e) => {
println!("่ทๅๅกไฟกๆฏๅคฑ่ดฅ: {:?}", e);
return Err("่ทๅๅกไฟกๆฏๅคฑ่ดฅ");
}
}
Ok(())
}
Err(e) => {
println!("EMMC ๆงๅถๅจๅๅงๅๅคฑ่ดฅ: {:?}", e);
Err("ๆงๅถๅจๅๅงๅๅคฑ่ดฅ")
}
}
}use sdmmc::emmc::EMmcHost;
fn read_write_test(emmc: &mut EMmcHost) -> Result<(), &'static str> {
// ่ฏปๅ็ฌฌไธไธชๆฐๆฎๅ
let mut read_buffer: [u8; 512] = [0; 512];
match emmc.read_blocks(0, 1, &mut read_buffer) {
Ok(_) => {
println!("่ฏปๅๆฐๆฎๅๆๅ");
println!("ๅ 16 ๅญ่: {:02X?}", &read_buffer[0..16]);
}
Err(e) => {
println!("่ฏปๅๆฐๆฎๅๅคฑ่ดฅ: {:?}", e);
return Err("่ฏปๅๅคฑ่ดฅ");
}
}
// ๅๅ
ฅๆต่ฏๆฐๆฎๅฐ็ฌฌไธไธชๆฐๆฎๅ
let mut write_buffer: [u8; 512] = [0; 512];
// ๅกซๅ
ๆต่ฏๆฐๆฎ
for i in 0..512 {
write_buffer[i] = (i % 256) as u8;
}
match emmc.write_blocks(2, 1, &write_buffer) {
Ok(_) => println!("ๅๅ
ฅๆฐๆฎๅๆๅ"),
Err(e) => {
println!("ๅๅ
ฅๆฐๆฎๅๅคฑ่ดฅ: {:?}", e);
return Err("ๅๅ
ฅๅคฑ่ดฅ");
}
}
// ่ฏปๅ้ช่ฏ
let mut verify_buffer: [u8; 512] = [0; 512];
match emmc.read_blocks(2, 1, &mut verify_buffer) {
Ok(_) => {
// ้ช่ฏๆฐๆฎไธ่ดๆง
let mut data_match = true;
for i in 0..512 {
if write_buffer[i] != verify_buffer[i] {
data_match = false;
break;
}
}
if data_match {
println!("ๆฐๆฎ้ช่ฏๆๅ");
} else {
println!("ๆฐๆฎ้ช่ฏๅคฑ่ดฅ");
return Err("ๆฐๆฎ้ช่ฏๅคฑ่ดฅ");
}
}
Err(e) => {
println!("้ช่ฏ่ฏปๅๅคฑ่ดฅ: {:?}", e);
return Err("้ช่ฏๅคฑ่ดฅ");
}
}
Ok(())
}use sdmmc::emmc::EMmcHost;
use core::ptr::NonNull;
fn main() -> Result<(), &'static str> {
// EMMC ๆงๅถๅจๅบๅฐๅ (RK3568)
let emmc_addr = 0xfe2e0000;
// ๅๅปบๆงๅถๅจๅฎไพ
let mut emmc = EMmcHost::new(emmc_addr);
// ๅๅงๅๆงๅถๅจ
println!("ๅๅงๅ EMMC ๆงๅถๅจ...");
if let Err(e) = emmc.init() {
println!("EMMC ๆงๅถๅจๅๅงๅๅคฑ่ดฅ: {:?}", e);
return Err("ๅๅงๅๅคฑ่ดฅ");
}
// ่ทๅๅกไฟกๆฏ
println!("่ทๅๅญๅจๅกไฟกๆฏ...");
match emmc.get_card_info() {
Ok(card_info) => {
println!("ๅก็ฑปๅ: {:?}", card_info.card_type);
println!("ๅถ้ ๅ ID: 0x{:02X}", card_info.manufacturer_id);
println!("ๅฎน้: {} MB", card_info.capacity_bytes / (1024 * 1024));
println!("ๅๅคงๅฐ: {} ๅญ่", card_info.block_size);
}
Err(e) => {
println!("่ทๅๅกไฟกๆฏๅคฑ่ดฅ: {:?}", e);
return Err("่ทๅๅกไฟกๆฏๅคฑ่ดฅ");
}
}
// ๆง่ก่ฏปๅๆต่ฏ
println!("ๆง่ก่ฏปๅๆต่ฏ...");
if let Err(e) = read_write_test(&mut emmc) {
println!("่ฏปๅๆต่ฏๅคฑ่ดฅ: {}", e);
return Err(e);
}
println!("ๆๆๆต่ฏๅฎๆ");
Ok(())
}
fn read_write_test(emmc: &mut EMmcHost) -> Result<(), &'static str> {
// ่ฏปๅ็ฌฌไธไธชๆฐๆฎๅ
let mut read_buffer: [u8; 512] = [0; 512];
match emmc.read_blocks(0, 1, &mut read_buffer) {
Ok(_) => {
println!("่ฏปๅๆฐๆฎๅๆๅ");
println!("ๅ 16 ๅญ่: {:02X?}", &read_buffer[0..16]);
}
Err(e) => {
println!("่ฏปๅๆฐๆฎๅๅคฑ่ดฅ: {:?}", e);
return Err("่ฏปๅๅคฑ่ดฅ");
}
}
// ๅๅ
ฅๆต่ฏๆฐๆฎๅฐ็ฌฌไธไธชๆฐๆฎๅ
let mut write_buffer: [u8; 512] = [0; 512];
// ๅกซๅ
ๆต่ฏๆฐๆฎ
for i in 0..512 {
write_buffer[i] = (i % 256) as u8;
}
match emmc.write_blocks(2, 1, &write_buffer) {
Ok(_) => println!("ๅๅ
ฅๆฐๆฎๅๆๅ"),
Err(e) => {
println!("ๅๅ
ฅๆฐๆฎๅๅคฑ่ดฅ: {:?}", e);
return Err("ๅๅ
ฅๅคฑ่ดฅ");
}
}
// ่ฏปๅ้ช่ฏ
let mut verify_buffer: [u8; 512] = [0; 512];
match emmc.read_blocks(2, 1, &mut verify_buffer) {
Ok(_) => {
// ้ช่ฏๆฐๆฎไธ่ดๆง
let mut data_match = true;
for i in 0..512 {
if write_buffer[i] != verify_buffer[i] {
data_match = false;
break;
}
}
if data_match {
println!("ๆฐๆฎ้ช่ฏๆๅ");
} else {
println!("ๆฐๆฎ้ช่ฏๅคฑ่ดฅ");
return Err("ๆฐๆฎ้ช่ฏๅคฑ่ดฅ");
}
}
Err(e) => {
println!("้ช่ฏ่ฏปๅๅคฑ่ดฅ: {:?}", e);
return Err("้ช่ฏๅคฑ่ดฅ");
}
}
Ok(())
}# ๅธฆuboot็ๅผๅๆฟๆต่ฏ
make uboot็นๅปๆฅ็ๆต่ฏ็ปๆ
_____ __
/ ___/ ____ ____ _ _____ _____ ___ ____ _ / /
\__ \ / __ \ / __ `// ___// ___// _ \ / __ `// /
___/ // /_/ // /_/ // / / / / __// /_/ // /
/____// .___/ \__,_//_/ /_/ \___/ \__,_//_/
/_/
Version : 0.12.2
Platfrom : RK3588 OPi 5 Plus
Start CPU : 0x0
FDT : 0xffff900000f29000
๐ 0.000ns [sparreal_kernel::driver:16] add registers
๐ 0.000ns [rdrive::probe::fdt:168] Probe [interrupt-controller@fe600000]->[GICv3]
๐ 0.000ns [somehal::arch::mem::mmu:181] Map `iomap `: RW- | [0xffff9000fe600000, 0xffff9000fe610000) -> [0xfe600000, 0xfe610000)
๐ 0.000ns [somehal::arch::mem::mmu:181] Map `iomap `: RW- | [0xffff9000fe680000, 0xffff9000fe780000) -> [0xfe680000, 0xfe780000)
๐ 0.000ns [rdrive::probe::fdt:168] Probe [timer]->[ARMv8 Timer]
๐ 0.000ns [sparreal_rt::arch::timer:78] ARMv8 Timer IRQ: IrqConfig { irq: 0x1e, trigger: LevelHigh, is_private: true }
๐ 0.000ns [rdrive::probe::fdt:168] Probe [psci]->[ARM PSCI]
๐ 0.000ns [spar:power:76] PCSI [Smc]
๐ 0.000ns [sparreal_kernel::irq:39] [GICv3](405) open
๐ 0.000ns [arm_gic_driver::version::v3:342] Initializing GICv3 Distributor@0xffff9000fe600000, security state: NonSecure...
๐ 0.000ns [arm_gic_driver::version::v3:356] GICv3 Distributor disabled
๐ 0.000ns [arm_gic_driver::version::v3:865] CPU interface initialization for CPU: 0x0
๐ 0.000ns [arm_gic_driver::version::v3:921] CPU interface initialized successfully
๐ 0.000ns [sparreal_kernel::irq:64] [GICv3](405) init cpu: CPUHardId(0)
๐ 0.000ns [sparreal_rt::arch::timer:30] ARMv8 Timer: Enabled
๐ 17.681s [sparreal_kernel::irq:136] Enable irq 0x1e on chip 405
๐ 17.681s [sparreal_kernel::hal_al::run:33] Driver initialized
๐ 18.304s [rdrive:132] probe pci devices
begin test
Run test: test_platform
๐ก 18.358s [test::tests:243] Found node: mmc@fe2e0000
๐ก 18.359s [test::tests:248๐ก 18.390s [test::tests:243] Found node: clock-controller@fd7c0000
๐ก 18.390s [teests:48] clk ptr: 0xffff9000fd7c0000
๐ก 18.395s [test::tests:53] emmc addr: 0xffff9000fe2e0000
๐ก 18.396s [test::tests:54] clk addr: 0xffff9000fd7c0000
๐ก 18.397s [sdmmc::emmc:74] EMMC Controller created: EMMC Controller { base_addr: 0xffff9000fe2e0000, card: None, caps: 0x226dc881, clock_base: 200000000 }
๐ก 18.398s [sdmmc::emmc:91] Init EMMC Controller
๐ 18.399s [sdmmc::emmc:100] Card inserted: true
๐ก 18.399s [sdmmc::emmc:105] EMMC Version: 0x5
๐ก 18.400s [sdmmc::emmc:108] EMMC Capabilities 1: 0b100010011011011100100010000001
๐ก 18.401s [sdmmc::emmc:114] EMMC Capabilities 2: 0b1000000000000000000000000111
๐ก 18.402s [sdmmc::emmc:162] voltage range: 0x60000, 0x12
๐ก 18.402s [sdmmc::emmc::rockchip:145] EMMC Power Control: 0xd
๐ 18.413s [sdmmc::emmc:974] Bus width set to 1
๐ 18.414s [sdmmc::emmc::rockchip:318] card_clock: 0, bus_width: 1, timing: 0
๐ก 18.415s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x0
๐ 18.415s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.416s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 18.417s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x0
๐ 18.417s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x0
๐ 18.418s [sdmmc::emmc::rockchip:318] card_clock: 400000, bus_width: 1, timing: 0
๐ 18.419s [rk3588_clk:111] Setting clk_id 314 to rate 400000
๐ 18.420s [rk3588_clk:152] CCLK_EMMC: src_clk 2, div 60, new_value 0xbb00, final_value 0xff00bb00
๐ 18.421s [rk3588_clk:73] Getting clk_id 314
๐ก 18.421s [sdmmc::emmc::rockchip:32] input_clk: 400000
๐ก 18.422s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 18.423s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x0
๐ 18.423s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.424s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 18.425s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.426s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 18.426s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x0
๐ 18.427s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x0
๐ 18.428s [sdmmc::emmc::rockchip:318] card_clock: 400000, bus_width: 1, timing: 0
๐ 18.428s [rk3588_clk:111] Setting clk_id 314 to rate 400000
๐ 18.429s [rk3588_clk:152] CCLK_EMMC: src_clk 2, div 60, new_value 0xbb00, final_value 0xff00bb00
๐ 18.430s [rk3588_clk:73] Getting clk_id 314
๐ก 18.431s [sdmmc::emmc::rockchip:32] input_clk: 400000
๐ก 18.431s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 18.432s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x0
๐ 18.433s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.434s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 18.434s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.435s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 18.436s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x0
๐ 18.436s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x0
๐ก 18.437s [sdmmc::emmc:226] eMMC initialization started
๐ 18.438s [sdmmc::emmc::cmd:244] Sending command: opcode=0x0, arg=0x0, resp_type=0x0, command=0x0
๐ 18.439s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.440s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.440s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 18.453s [sdmmc::emmc::cmd:416] eMMC reset complete
๐ 18.454s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x0, resp_type=0x1, command=0x102
๐ 18.455s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.455s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.456s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 18.469s [sdmmc::emmc::cmd:431] eMMC first CMD1 response (no args): 0xff8080
๐ 18.470s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_type=0x1, command=0x102
๐ 18.471s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.472s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.472s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 18.475s [sdmmc::emmc::cmd:453] CMD1 response raw: 0xff8080
๐ก 18.476s [sdmmc::emmc::cmd:454] eMMC CMD1 response: 0xff8080
๐ 18.477s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_type=0x1, command=0x102
๐ 18.479s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.479s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.480s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 18.483s [sdmmc::emmc::cmd:453] CMD1 response raw: 0xff8080
๐ก 18.484s [sdmmc::emmc::cmd:454] eMMC CMD1 response: 0xff8080
๐ 18.485s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_type=0x1, command=0x102
๐ 18.486s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.487s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.488s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 18.491s [sdmmc::emmc::cmd:453] CMD1 response raw: 0xff8080
๐ก 18.491s [sdmmc::emmc::cmd:454] eMMC CMD1 response: 0xff8080
๐ 18.493s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_type=0x1, command=0x102
๐ 18.494s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.495s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.496s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 18.498s [sdmmc::emmc::cmd:453] CMD1 response raw: 0xff8080
๐ก 18.499s [sdmmc::emmc::cmd:454] eMMC CMD1 response: 0xff8080
๐ 18.501s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_type=0x1, command=0x102
๐ 18.502s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.503s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.503s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 18.506s [sdmmc::emmc::cmd:453] CMD1 response raw: 0xff8080
๐ก 18.507s [sdmmc::emmc::cmd:454] eMMC CMD1 response: 0xff8080
๐ 18.508s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_type=0x1, command=0x102
๐ 18.510s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.510s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.511s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 18.514s [sdmmc::emmc::cmd:453] CMD1 response raw: 0xc0ff8080
๐ก 18.514s [sdmmc::emmc::cmd:454] eMMC CMD1 response: 0xc0ff8080
๐ก 18.515s [sdmmc::emmc::cmd:478] eMMC initialization status: true
๐ 18.517s [sdmmc::emmc::cmd:486] Clock control before CMD2: 0x7, stable: true
๐ 18.518s [sdmmc::emmc::cmd:244] Sending command: opcode=0x2, arg=0x0, resp_type=0x7, command=0x209
๐ 18.519s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.520s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.520s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 18.523s [sdmmc::emmc::cmd:69] eMMC response: 0x45010044 0x56343033 0x3201bb29 0x7a017c00
๐ 18.524s [sdmmc::emmc::cmd:244] Sending command: opcode=0x3, arg=0x10000, resp_type=0x15, command=0x31a
๐ 18.525s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.526s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.527s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 18.529s [sdmmc::emmc::cmd:244] Sending command: opcode=0x9, arg=0x10000, resp_type=0x7, command=0x909
๐ 18.530s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.531s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.532s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 18.535s [sdmmc::emmc::cmd:69] eMMC response: 0xd00f0032 0x8f5903ff 0xffffffef 0x8a404000
๐ 18.536s [sdmmc::emmc:256] eMMC CSD version: 4
๐ 18.536s [sdmmc::emmc::cmd:244] Sending command: opcode=0x7, arg=0x10000, resp_type=0x15, command=0x71a
๐ 18.537s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.538s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.539s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 18.541s [sdmmc::emmc:327] cmd7: 0x700
๐ 18.542s [sdmmc::emmc::cmd:244] Sending command: opcode=0x6, arg=0x3b90100, resp_type=0x1d, command=0x61b
๐ 18.543s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.544s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.545s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 18.547s [sdmmc::emmc:1010] cmd6 0x800
๐ 18.548s [sdmmc::emmc::cmd:244] Sending command: opcode=0xd, arg=0x10000, resp_type=0x15, command=0xd1a
๐ 18.549s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.550s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.550s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 18.553s [sdmmc::emmc::cmd:583] cmd_d 0x900
๐ 18.554s [sdmmc::emmc::rockchip:318] card_clock: 400000, bus_width: 1, timing: 1
๐ 18.555s [rk3588_clk:111] Setting clk_id 314 to rate 400000
๐ 18.555s [rk3588_clk:152] CCLK_EMMC: src_clk 2, div 60, new_value 0xbb00, final_value 0xff00bb00
๐ 18.556s [rk3588_clk:73] Getting clk_id 314
๐ก 18.557s [sdmmc::emmc::rockchip:32] input_clk: 400000
๐ก 18.558s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 18.558s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x0
๐ 18.559s [sdmmc::emmc::rockchip:106] EMMC Clocckchip:106] EMMC Clock Control: 0x7
๐ก 18.561s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 18.562s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x4
๐ 18.563s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x2
๐ 18.563s [sdmmc::emmc::rockchip:318] card_clock: 52000000, bus_width: 1, timing: 1
๐ 18.564s [rk3588_clk:111] Setting clk_id 314 to rate 52000000
๐ 18.565s [rk3588_clk:152] CCLK_EMMC: src_clk 1, div 23, new_value 0x5600, final_value 0xff005600
๐ 18.566s [rk3588_clk:73] Getting clk_id 314
๐ก 18.567s [sdmmc::emmc::rockchip:32] input_clk: 65217391
๐ก 18.567s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 18.568s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x1
๐ 18.569s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x107
๐ก 18.569s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 18.570s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.571s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 18.571s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x4
๐ 18.572s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x2
๐ 18.573s [sdmmc::emmc::cmd:244] Sending command: opcode=0x8, arg=0x0, resp_type=0x15, command=0x83a
๐ 18.574s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.575s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.575s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 18.576s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
๐ 18.577s [sdmmc::emmc:354] EXT_CSD: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 3, 0, 144, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 4, 0, 7, 0, 0, 2, 0, 0, 21, 31, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 13, 0, 0, 0, 0, 8, 0, 2, 0, 87, 31, 10, 3, 221, 221, 0, 0, 0, 10, 10, 10, 10, 10, 10, 1, 0, 224, 163, 3, 23, 19, 23, 7, 7, 16, 1, 3, 1, 8, 32, 0, 7, 166, 166, 85, 3, 0, 0, 0, 0, 221, 221, 0, 1, 255, 0, 0, 0, 0, 1, 25, 25, 0, 16, 0, 0, 221, 82, 67, 51, 48, 66, 48, 48, 55, 81, 80, 8, 8, 8, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 16, 0, 3, 3, 0, 5, 3, 3, 1, 63, 63, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]
๐ 18.591s [sdmmc::emmc:412] Boot partition size: 0x400000
๐ 18.591s [sdmmc::emmc:413] RPMB partition size: 0x1000000
๐ 18.592s [sdmmc::emmc:434] GP partition sizes: [0, 0, 0, 0]
๐ 18.593s [sdmmc::emmc::cmd:244] Sending command: opcode=0x8, arg=0x0, resp_type=0x15, command=0x83a
๐ 18.594s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.595s [sdmmc::emmc::cmd:263] Response Status: 0b100001
๐ 18.595s [sdmmc::emmc::cmd:288] Command completed: status=0b100001
๐ 18.596s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
๐ 18.597s [sdmmc::emmc::cmd:244] Sending command: opcode=0x8, arg=0x0, resp_type=0x15, command=0x83a
๐ 18.598s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.599s [sdmmc::emmc::cmd:263] Response Status: 0b100001
๐ 18.599s [sdmmc::emmc::cmd:288] Command completed: status=0b100001
๐ 18.600s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
๐ 18.601s [sdmmc::emmc::cmd:244] Sending command: opcode=0x6, arg=0x3b70200, resp_type=0x1d, command=0x61b
๐ 18.602s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.603s [sdmmc::emmc::cmd:263] Response Status: 0b11
๐ 18.604s [sdmmc::emmc::cmd:288] Command completed: status=0b11
๐ 18.604s [sdmmc::emmc:1010] cmd6 0x800
๐ 18.605s [sdmmc::emmc::cmd:244] Sending command: opcode=0xd, arg=0x10000, resp_type=0x15, command=0xd1a
๐ 18.606s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.607s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.608s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 18.608s [sdmmc::emmc::cmd:583] cmd_d 0x900
๐ 18.609s [sdmmc::emmc:974] Bus width set to 8
๐ 18.609s [sdmmc::emmc::rockchip:318] card_clock: 52000000, bus_width: 8, timing: 1
๐ 18.610s [rk3588_clk:111] Setting clk_id 314 to rate 52000000
๐ 18.611s [rk3588_clk:152] CCLK_EMMC: src_clk 1, div 23, new_value 0x5600, final_value 0xff005600
๐ 18.612s [rk3588_clk:73] Getting clk_id 314
๐ก 18.613s [sdmmc::emmc::rockchip:32] input_clk: 65217391
๐ก 18.613s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 18.614s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x1
๐ 18.615s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x107
๐ก 18.616s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 18.616s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.617s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 18.618s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x24
๐ 18.618s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x2
๐ 18.619s [sdmmc::emmc::cmd:244] Sending command: opcode=0x8, arg=0x0, resp_type=0x15, command=0x83a
๐ 18.620s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.621s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.622s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 18.622s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
๐ 18.623s [sdmmc::emmc::cmd:244] Sending command: opcode=0x6, arg=0x3b90200, resp_type=0x1d, command=0x61b
๐ 18.624s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.625s [sdmmc::emmc::cmd:263] Response Status: 0b11
๐ 18.626s [sdmmc::emmc::cmd:288] Command completed: status=0b11
๐ 18.626s [sdmmc::emmc:1010] cmd6 0x800
๐ 18.628s [sdmmc::emmc::rockchip:318] card_clock: 52000000, bus_width: 8, timing: 9
๐ 18.629s [rk3588_clk:111] Setting clk_id 314 to rate 52000000
๐ 18.630s [rk3588_clk:152] CCLK_EMMC: src_clk 1, div 23, new_value 0x5600, final_value 0xff005600
๐ 18.631s [rk3588_clk:73] Getting clk_id 314
๐ก 18.631s [sdmmc::emmc::rockchip:32] input_clk: 65217391
๐ก 18.632s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 18.633s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x1
๐ 18.633s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x107
๐ก 18.634s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 18.635s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.636s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 18.636s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x24
๐ก 18.637s [sdmmc::emmc::rockchip:145] EMMC Power Control: 0xb
๐ 18.648s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x1b
๐ 18.648s [sdmmc::emmc::rockchip:318] card_clock: 200000000, bus_width: 8, timing: 9
๐ 18.649s [rk3588_clk:111] Setting clk_id 314 to rate 200000000
๐ 18.650s [rk3588_clk:152] CCLK_EMMC: src_clk 1, div 6, new_value 0x4500, final_value 0xff004500
๐ 18.651s [rk3588_clk:73] Getting clk_id 314
๐ก 18.652s [sdmmc::emmc::rockchip:32] input_clk: 250000000
๐ก 18.652s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 18.653s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x1
๐ 18.654s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x107
๐ก 18.654s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 18.657s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.658s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 18.658s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x24
๐ก 18.659s [sdmmc::emmc::rockchip:145] EMMC Power Control: 0xb
๐ 18.670s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x1b
๐ 18.671s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.672s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.673s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.673s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.674s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.675s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.676s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.677s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.677s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.678s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.679s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.680s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.681s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.681s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.683s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.683s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.684s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.685s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.686s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.687s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.687s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.688s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.689s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.690s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.691s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.692s [sdmmc::emmc::cmd:24resp_type=0x15, command=0x153a
๐ 18.693s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.693s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.694s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.695s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.696s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.697s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.697s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.698s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.699s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.700s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.701s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.702s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.703s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.703s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.704s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.705s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.706s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.707s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.707s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.708s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.709s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.710s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.711s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.712s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.713s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.713s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.714s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.715s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.716s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.717s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.717s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.718s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.719s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.720s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.721s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.722s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.723s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.723s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.724s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 1 [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.726s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.727s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.727s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.728s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.729s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.730s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.731s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.732s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.733s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.733s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.734s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.735s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.736s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.737s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.738s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.738s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.739s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.740s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.741s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.742s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.743s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.743s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.744s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.745s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.746s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.747s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.748s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.748s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.749s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.750s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.751s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.752s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.753s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.754s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.754s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.755s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.756s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.757s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.758s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.758s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.759s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.760s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.761s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.762s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.763s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.764s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.764s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.765s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.766s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.767s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.768s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.768s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.769s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.770s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.771s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 18.772s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 18.773s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.774s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 18.774s [sdmmc::emmc::cmd:nse Status: 0b100000
๐ 18.778s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
ully
SD card initialization successful!
Card type: MmcHc
Manufacturer ID: 0x45
Capacity: 0 MB
Block size: 512 bytes
Attempting to read first block...
๐ 18.780s [sdmmc::emmc::block:365] pio read_blocks: block_id = 5034498, blocks = 1
๐ 18.781s [sdmmc::emmc::block:383] Reading 1 blocks starting at address: 0x4cd202
๐ 18.782s [sdmmc::emmc::cmd:244] Sending command: opcode=0x11, arg=0x4cd202, resp_type=0x15, command=0x113a
๐ 18.783s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.784s [sdmmc::emmc::cmd:263] Response Status: 0b100001
๐ 18.785s [sdmmc::emmc::cmd:288] Command completed: status=0b100001
๐ 18.786s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
Successfully read first block!
First 16 bytes of first block: [40, E2, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 8F, D2, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, DB, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, E0, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, C0, EC, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, E9, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, EE, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, E4, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, C0, DE, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, F0, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, DD, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, E7, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, A9, D5, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 5B, D7, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, 50, D6, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 4E, D6, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 60, 4F, D6, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, CE, CD, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 48, DF, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 8E, D2, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 60, D6, CD, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 90, D2, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, A0, 09, DD, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, B9, E1, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, EB, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 60, DD, E0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, D1, CD, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, E0, 7E, E2, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, A8, D5, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, D7, CD, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 91, D2, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, C0, E5, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00]
Testing write and read back...
๐ 18.804s [sdmmc::emmc::block:417] pio write_blocks: block_id = 3, blocks = 1
๐ 18.805s [sdmmc::emmc::block:439] Writing 1 blocks starting at address: 0x3
๐ 18.806s [sdmmc::emmc::cmd:244] Sending command: opcode=0x18, arg=0x3, resp_type=0x15, command=0x183a
๐ 18.807s [sdmmc::emmc::cmd:263] Response Status: 0b10000
๐ 18.808s [sdmmc::emmc::cmd:263] Response Status: 0b10001
๐ 18.808s [sdmmc::emmc::cmd:288] Command completed: status=0b10001
๐ 18.809s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
Successfully wrote to block 3!
๐ 18.811s [sdmmc::emmc::block:365] pio read_blocks: block_id = 3, blocks = 1
๐ 18.812s [sdmmc::emmc::block:383] Reading 1 blocks starting at address: 0x3
๐ 18.813s [sdmmc::emmc::cmd:244] Sending command: opcode=0x11, arg=0x3, resp_type=0x15, command=0x113a
๐ 18.814s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.815s [sdmmc::emmc::cmd:263] Response Status: 0b100001
๐ 18.816s [sdmmc::emmc::cmd:288] Command completed: status=0b100001
๐ 18.816s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
Successfully read back block 3!
First 16 bytes of read block: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Data verification successful: written and read data match perfectly!
Testing multi-block read...
๐ 18.831s [sdmmc::emmc::block:365] pio read_blocks: block_id = 200, blocks = 4
๐ 18.832s [sdmmc::emmc::block:383] Reading 4 blocks starting at address: 0xc8
๐ 18.833s [sdmmc::emmc::cmd:244] Sending command: opcode=0x12, arg=0xc8, resp_type=0x15, command=0x123a
๐ 18.834s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.835s [sdmmc::emmc::cmd:263] Response Status: 0b100001
๐ 18.835s [sdmmc::emmc::cmd:288] Command completed: status=0b100001
๐ 18.836s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
๐ 18.837s [sdmmc::emmc::cmd:244] Sending command: opcode=0xc, arg=0x0, resp_type=0x1d, command=0xc1b
๐ 18.838s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.839s [sdmmc::emmc::cmd:263] Response Status: 0b11
๐ 18.840s [sdmmc::emmc::cmd:288] Command completed: status=0b11
Successfully read 4 blocks starting at block address 200!
First 16 bytes of first block: [A0, 2F, 00, B9, A1, 8B, 0D, A9, A0, 07, 42, A9, A0, 07, 04, A9]
First 16 bytes of last block: [B5, 01, BD, 01, C6, 01, CE, 01, D6, 01, DE, 01, E7, 01, EF, 01]
SD card test complete
๐ก 18.843s [test::tests:58] test uboot
test test_platform passed
All tests passed
ๆต่ฏ็จๅบไผๆง่กไปฅไธๆไฝ๏ผ
- ่ฎพๅคๆ ่งฃๆ: ไป่ฎพๅคๆ ไธญๆฅๆพ EMMC ๆงๅถๅจ็กฌไปถ่็นๅฐๅ
- EMMC ๆงๅถๅจๅๅงๅ: ๅๅงๅ DWCMSHC EMMC ๆงๅถๅจ
- ๅญๅจๅกๆฃๆต: ๆฃๆตๅนถๅๅงๅ่ฟๆฅ็ eMMC ๅญๅจๅก
- ๅบๆฌ่ฏปๅๆต่ฏ:
- ่ฏปๅๅญๅจๅกไฟกๆฏ
- ่ฏปๅๆฐๆฎๅ
- ๅๅ ฅๆฐๆฎๅๅนถ้ช่ฏ
- ๅคๅ่ฏปๅๆต่ฏ
- ๆฐๆฎไธ่ดๆง้ช่ฏ: ้ช่ฏๅๅ ฅๅ่ฏปๅ็ๆฐๆฎๆฏๅฆไธ่ด
ๆณจๆ: ๅฎๆดๆต่ฏ้่ฆๆฏๆ ARM ็กฌไปถๅนณๅฐๅ U-Boot ็ฏๅข
ๆฌ้กน็ฎ้็จ MIT ่ฎธๅฏ่ฏ - ๆฅ็ LICENSE ๆไปถไบ่งฃ่ฏฆๆ