Giao tiếp qua SD bus trong chế độ SD

MỤC LỤC

Các chế độ của SD Card

Giao tiếp qua SD bus chủ yếu dựa trên các lệnh và tín hiệu phản hồi , khởi tạo bằng bit bắt đầu và bit kết thúc.  Lệnh (command) : là tín hiệu điều khiển việc giao tiếp được host truyền đi tới các SD card.  Phản hồi (response): là tín hiệu do Card gửi trả lại host sau mỗi command nhận trước đó.

 Dữ liệu (data): dữ liều được truyền hai chiểu từ card đến host và ngược lại. Host trong chế độ SD sử dụng 1 hoặc cả 4 đường Data để truyền dữ liệu. Dữ liệu luôn được truyền theo từng khối (block), kết thúc mỗi block là mã CRC.

Tuy nhiên trong từng byte , MSB (Most significant bit) lại được gửi trước và LSB cuối cùng.  Quá trình đọc: bắt đầu khi host gửi yêu cầu đến card, card sẽ gửi trả bằng tín hiệu Response sau đó dữ liệu sẽ được card gửi (tùy vào lệnh mà dữ liệu sẽ gồm nhiều block hay chỉ 1 block) , cuối cùng host phát lệnh dừng đọc.  Quá trình ghi: tương tự như quá trình đọc, sau khi host gửi command , nếu card gửi response chấp nhận và host sẽ gửi dữ liệu.

Chế độ SPI sử dụng một đường dữ liệu và 1 đường tín hiệu CS nên có nhược điểm là tốc độ chậm hơn chế độ SD mode. Chế độ SPI trong giao tiếp với SD Card được thực hiện dựa trên chế độ SD Mode ( sử dụng phương thức giao tiếp và một số lệnh). SD Card Page 16 lệnh (command) và chuỗi bit truyển, dùng bit khởi đầu và kết thúc; SPI Mode chủ yếu dựa trên cơ sở byte .Mỗi lệnh hay khối dữ liệu đều tạo bởi các byte và căn theo chu kì của 8 xung clock (tín hiệu CS).

Giao tiếp giữa host và card được điều khiển bới host (host điều khiển xung CS). Qua trình đọc và ghi trong chế độ SPI giống như trong chế độ SD.

Định dạng lưu trữ trong SD Card

Cấu trúc ổ đĩa cứng sử dụng FAT16 1. Master Boot Record

Để lấy được Sector từ mục trên ta thực hiên phép AND với 3Fh ( lấy 6 bit cuối). Để lấy được số Cylinder ta lấy byte cao thực hiện phép OR với byte thấy đã được dịch trái 2 lẩn sau khi AND với C0h. Vì FAT 16 giới hạn 2GB cho mỗi partion, vì vậy nên đĩa cứng thường phải quản lý nhiều phân vùng.

Phân vùng đầu tiên là phân vùng chính( primary partion) và các phân vùng còn lại được lưu trong phân vùng mở rộng ( Extended Partition). Chỉ mục phân vùng đầu tiên chỉ đến phân vùng chính, chỉ mục thứ hai trong bảng lưu địa chỉ phân vùng mở rộng. Để đọc các phân vùng này đầu tiên phải đọc sector đầu tiên của các phân vùng mở rộng, Sector này giống hệt như MBR nhưng không có các đoạn code.

Và trong bảng chỉ mục phân vùng, chỉ mục phân vùng đầu tiên sẽ chỉ đến phân vùng mở rộng thứ hai, chỉ mục phân vùng tiếp theo sẽ chỉ đến phân vùng mở rộng khác giống như trên. Trong phân vùng mở rộng, địa chỉ sẽ được tính lại từ bảng MBR mới. Tại đây ta có Giá trị giữa MBR đến sector đầu tiên của phân vùng ( lưu tại địa chỉ offset 08h trong bảng Chỉ mục phân vùng) và Số Sector của phân vùng (lưu tại địa chỉ offset Och) sẽ được tính từ bảng MBR mới mà không phải từ MBR của đĩa cứng.

Khi nhìn vào số của các ô trong bảng FAT ta có thế biết được cluster đó đã có dữ liệu hay chưa, dữ liệu đã kết thúc hay chưa, nếu chưa thì ở cluster nào sau nó. Tất cả dữ liệu trong 1 phân vùng đều bắt đàu từ cluster thứ hai (ngay sau Root Directory). Nếu ô có giá trị 0 thì cluster ứng với nó không có dữ liệu, nếu ô có giá trị FFFFh thì đó là ô cuối cùng trong chuỗi dữ liệu.

Ngoài ra file có thể trải dài trên nhiều cluster khác nhau (không nhất thiết liên tục) Bảng FAT lập ra để chỉ ra khi đọc 1 file, chương trình cần đọc ở những cluster nào. 0002h-FFEFh Cluster đã có dữ liệu, chỉ đến cluster tiếp theo của file FFF0h-FFF6h Cluster định trước ( reserved cluster). Chứa giá trị giây của thời điểm tạo file DIR_CrtTime 14 2 Chứa thời điểm tạo file.

Bảng 4.3. Chỉ mục phân vùng
Bảng 4.3. Chỉ mục phân vùng

Các thanh ghi trong SD Card

Thêm vào đó, thanh ghi này còn bao gồm cả các bit thông tin trạng thái (status information bits). Thanh ghi này còn bao gồm 1 bit trạng thái khác chỉ ra trạng thái lưu trữ của card sau khi (set power up status bit). Nếu một Dual Voltage Card không nhận CMD8, bit 7 OCR trong response sẽ là 0 và ngược lại.

Sở dĩ có bit này vì có 1 chuẩn riêng cho High Capacity SD Memory Card. Nó chưa thông tin để nhận dạng card (card indentification information) được sử dụng trong pha card identification. Mỗi card (trong hệ thống có thể có nhiều card) sẽ có một chỉ số duy nhất.

Bảng 4.10.  Các trường CID
Bảng 4.10. Các trường CID

Cách gửi lệnh và nhận phản hồi

Command

    Để điều khiển SD Card, Vi xử lý sẽ gửi các Command đến SD Card qua đường CMD trong chế độ SD. Đối với SD Card, có rất nhiều Command được sử dụng, tuy nhiên, trong giới hạn đề tài, chúng ta chỉ xét một vài Command được sử dụng.  Addressed (point-to-point) Data Transfer Commands (adtc): có truyền dữ liệu trên đường DAT.

    R2 All_send_cid Hỏi mọi thiết bị để gửi số hiệu card của chúng trên đường CMD. R1 APP_CMD Trước mỗi lệnh acmd (lệnh có chức năng đặc biệt) ta phải dùng lệnh cmd55 này. R7 SEND_EXT_CSD Yêu cầu thẻ gửi thông tin các thanh ghi CSD(Card Specific Data) dưới dạng block dữ liệu.

    Bảng 4.12. Card Command Classes
    Bảng 4.12. Card Command Classes

    Response

      Một response luôn luôn bắt đầu là bit ‘0’, tiếp theo là bit chỉ hướng của dòng dữ liệu trên đường CMD, ‘1’ nếu hướng là host-card, ‘0’ là hướng ngược lại. Trong những bảng dưới đây, một giá trị được ký hiệu là ‘x’ nếu nó là khu vực biến. Chú ý rằng nếu việc truyền dữ liệu quá phức tạp, một tín hiệu báo bận có thể xuất hiện trên được dữ liệu sau sự truyền 1 block dữ liệu.

      Nội dung của thanh ghi CID được gửi như là 1 response cho các lệnh CMD2 và CMD10. Nếu card phù hợp với nhưng điện áp cung cấp thì nó trả lại R7 response. Trong loại response này, card phản hồi cả khoảng điện áp và check pattern set trong trường argument.

      Bảng 4.15. Response R2
      Bảng 4.15. Response R2

      Phương pháp truyền nhận dữ liệu

      Card Initialization and Card Initializatio

      - Bằng việc hiện set thanh ghi OCR (operation conditions register) về 0 trong đối số của ACMD41, host có thể hỏi và xác định khoảng giá trị trước khi đưa card có khoảng giá trị làm việc không phù hợp về trạng thái inactive. - Sau khi lệnh này được gửi thành công, card chuyển sang trạng thái Ready Lệnh CMD2 (ALL_SEND_CID) – phản hồi R2. - Khi host gửi lệnh này đi, tất cả các card phải gửi địa chỉ ID về cho host (địa chỉ này được lưu trong thanh ghi CID – card indentification number về host.

      - Sau khi lệnh này được gửi card chuyển sang trạng thái Indentification Lệnh CMD3 (SEND_RELATIVE_ADDR) – phản hồi R6. - Khi host gửi lệnh này, tất cả các card sẽ gửi các địa chỉ tương đối (RCA) đến cho host. Địa chỉ này sẽ được sử dụng cho chế độ truyền dữ liệu (data transfer) ở sau.

      - Một khi địa chỉ RCA được gửi đi, card sẽ chuyển sang trạng thái Stand-by. - Nếu muốn gán giá trị RCA khác cho SD, host có thể gửi lệnh CMD3 khác tới card.

      Data transfer Mode

      - Lệnh CMD7 được sử dụng để đưa card trong các card đã kết nối được và chuyển nó thành chế độ Transfer. Ngoài ra, khi lệnh CMD7 được gửi với địa chỉ RCA=0x0000, thì tất cả card đều được chuyển về trạng thái Stand-by. - Sau lệnh này, host và card được chọn sẽ kết nối trực tiếp với nhau.

      - Tác dụng của lệnh là xác định độ dài của block truyền phù hợp với loại thẻ SD sử dụng.