Bo mạch chạy được ở 24 MHz nhưng treo ở 104 MHz. Firmware đọc đúng byte đầu rồi trả về rác từ byte thứ hai. Cùng một mã nguồn chạy tốt với chip flash lô cũ, hỏng với lô mới cùng mã đặt hàng. Ba triệu chứng khác nhau, gần như luôn cùng một gốc: số chu kỳ chờ (dummy cycle) hoặc biên định thời đọc không đúng. Bài này đi vào cách kiểm thử SPI flash một cách có hệ thống — từ việc đọc bảng tham số mà chính con chip tự khai báo, tới việc chọn đúng loại kênh trên máy hiện sóng để đo được cái cần đo.

Vì sao kiểm thử SPI flash khó hơn vẻ ngoài của nó
SPI trông đơn giản: một xung nhịp, một chọn chip, một đường vào, một đường ra. Nhưng bộ nhớ flash nối tiếp hiện đại đã đi xa khỏi mô hình bốn dây đó theo ba hướng cùng lúc.
Hướng thứ nhất — số làn dữ liệu. JEDEC dùng ký hiệu (x-y-z) để chỉ số chân tích cực dùng cho mã lệnh (x), địa chỉ (y) và dữ liệu (z). Một lệnh (1-1-1) là SPI cổ điển một làn; (1-1-4) là fast read đưa mã lệnh và địa chỉ trên một làn nhưng trả dữ liệu trên bốn làn; (4-4-4) là chế độ Quad hoàn toàn. Với cùng một con chip, ba chế độ này có sơ đồ định thời khác nhau — và máy hiện sóng chỉ giải mã đúng khi bạn nói cho nó biết đang ở chế độ nào.
Hướng thứ hai — chu kỳ chờ. JEDEC JESD216 định nghĩa Wait States là “các chu kỳ nhịp rỗng bắt buộc sau các bit địa chỉ hoặc sau các bit chế độ tùy chọn”, và Mode Bits là “các bit điều khiển tùy chọn theo sau các bit địa chỉ”. Số chu kỳ chờ không cố định: nó phụ thuộc nhà sản xuất, phụ thuộc lệnh, và ở nhiều chip còn phụ thuộc tần số nhịp đang chạy. Đây là lý do một hệ thống chạy tốt ở nhịp thấp lại hỏng khi tăng nhịp — số dummy cycle cần thiết đã tăng nhưng cấu hình vẫn giữ nguyên.
Hướng thứ ba — DDR. Ở chế độ song biên, dữ liệu chốt trên cả sườn lên và sườn xuống, cắt đôi ngân sách thời gian mà tín hiệu phải ổn định. Cửa sổ hợp lệ 3 ns ở chế độ SDR trở thành 1,5 ns ở DDR — vào đúng vùng mà độ dốc sườn của tín hiệu và tải dung của đường mạch bắt đầu ăn hết biên.

SFDP: con chip tự khai báo tham số, hãy đọc nó trước khi đoán
JEDEC JESD216 Serial Flash Discoverable Parameters đặt một cơ sở dữ liệu tham số ngay trong con chip, đọc được bằng một lệnh chuẩn hóa. Đây là công cụ chẩn đoán mạnh nhất mà phần lớn kỹ sư nhúng chưa dùng tới, và nó hoàn toàn quan sát được trên máy hiện sóng.
Các con số của giao thức Read SFDP được JESD216 quy định cứng, không phụ thuộc nhà sản xuất:
- Mã lệnh 0x5A — cố định cho mọi thiết bị tuân thủ.
- Địa chỉ 24 bit — luôn là 24 bit, kể cả với chip dung lượng lớn dùng địa chỉ 32 bit cho vùng nhớ chính.
- Tám chu kỳ chờ — tiêu chuẩn ghi rõ: sau phần địa chỉ, cần tám nhịp rỗng trước khi dữ liệu hợp lệ được đưa ra.
- Bắt buộc hỗ trợ 50 MHz — thiết bị có thể chạy nhanh hơn, nhưng bộ điều khiển luôn có thể chạy chu trình SFDP ở 50 MHz trở xuống và nhận kết quả hợp lệ.
- Ba chế độ I/O hợp lệ — (1-1-1), (2-2-2) và (4-4-4). Mã lệnh, độ dài địa chỉ, số dummy cycle và yêu cầu 50 MHz giữ nguyên ở cả ba.
Bảng SFDP nằm tại địa chỉ 0x000000 và bắt đầu bằng chữ ký 0x50444653 — chính là bốn ký tự “SFDP” theo thứ tự little-endian. Đây là điểm kiểm tra đầu tiên khi soi bằng máy hiện sóng: nếu bốn byte đầu giải mã ra không phải chuỗi đó, vấn đề nằm ở lớp vật lý hoặc ở số dummy cycle, chứ chưa phải ở firmware phía trên.
DWORD thứ hai của bảng tham số cơ bản mã hóa dung lượng theo một quy tắc rất dễ đọc sai: với dung lượng từ 2 Gbit trở xuống, bit 31 bằng 0 và trường 30:0 là kích thước tính bằng bit (ví dụ 0x00FFFFFF là 16 Mbit); với dung lượng từ 4 Gbit trở lên, bit 31 bằng 1 và trường 30:0 là số mũ N với dung lượng bằng 2^N bit (ví dụ 0x80000021 là 2^33 = 8 Gbit). Một trình điều khiển đọc nhầm quy tắc này sẽ tính sai dung lượng đúng gấp đôi hoặc bằng một nửa.
Tiêu chuẩn mở rộng JESD251 (xSPI) bổ sung bảng Profile 1.0 cho giao diện octal và cho DDR, nơi số dummy cycle được khai báo riêng theo từng mức tần số. Với thiết kế dùng flash octal, đây là bảng phải đọc chứ không phải bảng cơ bản.
Bẫy định thời đọc flash: cửa sổ đọc và bốn thời điểm quyết định
Khi bắt được sóng, có bốn quan hệ định thời đọc flash quyết định bo mạch chạy hay không:
- Từ sườn nhịp tới dữ liệu hợp lệ ở đầu ra chip. Chip cần một khoảng thời gian sau sườn tích cực để đẩy bit ra. Bộ điều khiển phải lấy mẫu sau khoảng đó cộng với trễ đường mạch.
- Thời gian thiết lập và giữ tại chân của chính chip flash. Đo tại chân IC, không đo tại chân vi điều khiển — trễ đường mạch và tải dung nằm giữa hai điểm đó.
- Khoảng từ cạnh xuống của chọn chip tới sườn nhịp đầu tiên, và khoảng nhả chọn chip sau nhịp cuối. Nhiều lỗi “byte đầu đúng, byte sau rác” thực chất là chọn chip nhả sớm hoặc đến muộn.
- Vị trí đếm dummy cycle. Đây là chỗ máy hiện sóng thắng mọi công cụ khác: đếm số nhịp giữa bit địa chỉ cuối và bit dữ liệu đầu, so với số mà SFDP khai báo. Lệch một nhịp là toàn bộ byte sau đó dịch bit — biểu hiện đúng như “dữ liệu rác nhưng có cấu trúc”.
Với chế độ Quad SPI, nhìn riêng một đường IO không đủ: bốn đường phải được so cùng lúc vì bit nibble được ghép từ IO0..IO3 trên cùng một sườn. Lệch giữa các làn — do chiều dài đường mạch khác nhau — làm nibble ghép sai mà từng đường vẫn “trông đẹp” riêng lẻ.

Kênh analog hay kênh số: cây quyết định trên máy hiện sóng
Đây là quyết định thực dụng quan trọng nhất của cả phép đo, và nó phụ thuộc con số cụ thể của phần cứng.
Kênh số của máy hiện sóng InfiniiVision 3000 X-Series lấy mẫu ở 1 GSa/s (1,25 GSa/s trên các model băng thông 1 GHz), với tốc độ chuyển mức 50 MHz. Một giây trên mỗi tỉ mẫu nghĩa là bước lượng tử thời gian 1 ns. Với một bus QSPI chạy 104 MHz, chu kỳ nhịp là 9,6 ns — bước 1 ns đủ để giải mã khung tin và đếm dummy cycle, nhưng không đủ để tuyên bố một biên thiết lập/giữ còn lại bao nhiêu picosecond.
Cây quyết định rút gọn:
- Cần đếm dummy cycle, xem chuỗi lệnh, tìm khung tin lỗi giữa hàng nghìn giao dịch → dùng kênh số. 16 kênh số cho phép soi CLK, CS và cả bốn đường IO cùng lúc mà không tiêu tốn kênh analog.
- Cần con số setup/hold, thời gian sườn, quá xung, mức ngưỡng thực tế → dùng kênh analog, băng thông tối thiểu gấp năm lần tần số nhịp để giữ được hài bậc năm của sườn.
- Cần cả hai → đó chính là lý do MSO tồn tại: kích hoạt theo điều kiện giao thức trên bus số, rồi đọc dạng sóng analog tương quan thời gian của cùng sự kiện đó.
Một chi tiết dễ bỏ sót: ngưỡng logic của kênh số phải đặt đúng theo họ logic của bo mạch. Flash 1,8 V và flash 3,3 V có ngưỡng khác hẳn nhau; để nguyên ngưỡng mặc định là cách nhanh nhất để tạo ra những “xung ma” không hề tồn tại.
Kích hoạt và giải mã SPI trên máy hiện sóng Keysight
Trên dòng InfiniiVision 3000G X-Series, gói phân tích nhúng D3000GENB được cấp sẵn theo máy (standard) chứ không phải mua thêm. Gói này bật kích hoạt và giải mã cho I²C, SPI, I²S, RS232/422/485/UART và USB-PD, kèm kiểm thử mặt nạ, phân tích đáp ứng tần số (biểu đồ Bode) và phân tích video HDTV. Phần SPI hỗ trợ cả ba biến thể 2 dây, 3 dây và 4 dây, hiển thị giải mã trên màn hình tương quan thời gian với dạng sóng, và cho phép hiển thị danh sách giao dịch cũng như giải mã nhiều bus cùng lúc.
Quy trình thực tế cho một phiên kiểm thử SPI flash:
- Gán CLK, CS, IO0/MOSI, IO1/MISO (và IO2, IO3 nếu chạy Quad) vào kênh số; đặt ngưỡng theo mức logic của bo.
- Kích hoạt theo chọn chip xuống, chụp toàn bộ một giao dịch từ mã lệnh tới byte dữ liệu cuối.
- Bật giải mã SPI, kiểm tra mã lệnh đọc ra có đúng là 0x5A khi phát lệnh Read SFDP, và bốn byte trả về có phải chữ ký 0x50444653 hay không.
- Đếm số nhịp giữa bit địa chỉ cuối và bit dữ liệu đầu — với Read SFDP con số phải đúng bằng tám.
- Chuyển CLK và một đường IO sang kênh analog, đo lại sườn và biên thiết lập/giữ tại chân chip ở đúng tần số vận hành.

Chọn máy hiện sóng Keysight cho bàn thử flash nối tiếp
Tiêu chí chọn máy ở đây không phải băng thông cao nhất, mà là đủ kênh số để soi cả bus Quad cộng đủ băng thông analog cho tần số nhịp cao nhất bo mạch chạy.
- Máy hiện sóng Keysight MSOX3054G — 500 MHz, 4 kênh analog cộng 16 kênh số, 5 GSa/s, bộ nhớ 4 Mpts. Đây là cấu hình cân bằng nhất cho bàn thử nhúng: 16 kênh số phủ trọn CLK, CS và bốn đường IO còn thừa chỗ cho tín hiệu điều khiển, trong khi 500 MHz analog đủ cho bus tới khoảng 100 MHz. Xem thêm ứng dụng MSOX3054G theo từng ngành.
- Keysight MSOX3104G — 1 GHz, 4 kênh analog cộng 16 kênh số. Chọn cấu hình này khi bo mạch chạy octal DDR hoặc khi cần dựng lại sườn tín hiệu ở nhịp trên 100 MHz. Chi tiết trong bài so sánh MSOX3104G với dòng 3000G.
- Keysight MSOX6002A — 2 kênh analog cộng 16 kênh số, 20 GSa/s, 4 Mpts, ADC 8 bit, băng thông khởi điểm 1 GHz nâng cấp được lên 2,5/4/6 GHz. Sàn nhiễu 115 µVrms ở 1 mV/div với cấu hình 1 GHz và 210 µVrms ở cấu hình 6 GHz. Đây là lớp máy cho bài toán toàn vẹn tín hiệu thật sự — khi câu hỏi không còn là “giải mã ra gì” mà là “sườn này có đủ sạch không”. So sánh chi tiết trong bài khi nào thực sự cần MSOX6002A.
- Keysight MSOX2024A — 100 MHz, 4 kênh analog cộng 8 kênh số, 2 GSa/s. Tám kênh số vẫn đủ cho SPI một làn và cho bàn đào tạo, nhưng không đủ thoải mái cho Quad-SPI có thêm tín hiệu điều khiển.
Kết luận
Ba việc tách một phiên gỡ lỗi flash nối tiếp có phương pháp khỏi một phiên đoán mò. Thứ nhất, đọc SFDP trước — con chip đã tự khai báo số dummy cycle, dung lượng và các lệnh fast read mà nó hỗ trợ, và các hằng số của giao thức Read SFDP (0x5A, địa chỉ 24 bit, tám chu kỳ chờ, 50 MHz) là bất biến nên rất dễ kiểm chứng bằng mắt trên màn hình. Thứ hai, đếm dummy cycle trên sóng thật thay vì tin vào cấu hình phần mềm. Thứ ba, dùng đúng loại kênh: kênh số để nhìn giao thức, kênh analog để tuyên bố con số định thời — bước lượng tử 1 ns của kênh số không phải là công cụ để chứng minh biên setup/hold.
Số liệu đo chỉ có giá trị khi máy còn trong hạn hiệu chuẩn — biên định thời picosecond mà bạn báo cáo phụ thuộc trực tiếp vào độ chính xác cơ sở thời gian của máy. Techmaster Electronics là đại lý ủy quyền Keysight tại Việt Nam và vận hành phòng hiệu chuẩn theo ISO/IEC 17025 cho máy hiện sóng cùng đầu dò đi kèm. Liên hệ hotline 0908 173 345 để được tư vấn cấu hình kênh số và băng thông theo bus của bạn, hoặc đặt lịch hiệu chuẩn định kỳ.
Câu hỏi thường gặp
Vì sao bo mạch đọc được SPI flash ở nhịp thấp nhưng hỏng khi tăng nhịp?
Nguyên nhân phổ biến nhất là số chu kỳ chờ (dummy cycle). Ở nhiều chip flash, số dummy cycle cần thiết cho lệnh fast read tăng theo tần số nhịp. Nếu cấu hình giữ nguyên số cũ khi tăng nhịp, bộ điều khiển lấy mẫu quá sớm và toàn bộ byte sau đó bị dịch bit — biểu hiện là dữ liệu rác nhưng có cấu trúc. Bảng SFDP trong chính con chip khai báo số dummy cycle theo từng mức tần số.
SFDP là gì và đọc nó thế nào?
SFDP (Serial Flash Discoverable Parameters) theo JEDEC JESD216 là cơ sở dữ liệu tham số nằm ngay trong chip flash. Đọc bằng mã lệnh 0x5A với địa chỉ 24 bit và tám chu kỳ chờ; mọi thiết bị tuân thủ đều phải hoạt động ở 50 MHz cho lệnh này. Bảng nằm tại địa chỉ 0x000000 và bắt đầu bằng chữ ký 0x50444653, tức bốn ký tự SFDP.
Nên dùng kênh số hay kênh analog để đo bus SPI flash?
Dùng kênh số để nhìn giao thức — đếm chu kỳ chờ, kiểm mã lệnh, soi cả bốn đường IO của bus Quad cùng lúc. Dùng kênh analog để tuyên bố con số định thời — thiết lập, giữ, thời gian sườn, quá xung. Kênh số của InfiniiVision 3000 X-Series lấy mẫu 1 GSa/s (1,25 GSa/s trên model 1 GHz), tức bước lượng tử 1 ns: đủ để đếm nhịp, không đủ để chứng minh biên thiết lập/giữ.






