inflearn logo

Tìm hiểu AMBA dành cho lập trình viên – đọc các bus APB·AHB·AXI qua tài liệu đặc tả và bo mạch

Bạn đã bao giờ tận mắt quan sát một dòng code mình viết di chuyển bên trong con chip như thế nào chưa? Khi lần theo các hình vẽ tay và những phép đo trên bo mạch thực tế, luồng dữ liệu vốn mơ hồ bên trong chip dần hiện lên rõ nét, và bạn cũng bắt đầu nhận ra nguyên nhân của những lỗi thỉnh thoảng phát sinh.

6 học viên đang tham gia khóa học này

Độ khó Cơ bản

Thời gian Không giới hạn

Computer Architecture
Computer Architecture
ARM Architecture
ARM Architecture
soc
soc
amba
amba
cache
cache
Computer Architecture
Computer Architecture
ARM Architecture
ARM Architecture
soc
soc
amba
amba
cache
cache

Bạn sẽ nhận được điều này sau khi học.

  • Giải thích bằng hình vẽ đường đi (bus) của một dòng mã bên trong chip.

  • Quy tắc cơ bản và sự khác biệt trong việc ghi và đọc dữ liệu của APB, AHB và AXI

  • Giải thích các lỗi chỉ thỉnh thoảng mới xảy ra (ngắt được kích hoạt hai lần, thứ tự bị đảo lộn, giá trị 0 không báo hiệu) bằng hoạt động của bus

  • Cách tự tìm và đọc sơ đồ bus trong tài liệu hướng dẫn chip và tài liệu đặc tả gốc của Arm

  • Bức tranh tổng quan về những gì các phiên bản mới nhất (APB5·AHB5·AXI5) và nhãn bảo mật bổ sung】【。】【”】【

Những gì bạn sẽ đạt được sau khóa học

Bạn sẽ có thể vẽ sơ đồ đường đi của một dòng mã do mình viết bên trong con chip. Khi giá trị đã được ghi nhưng không cập nhật ngay, khi đôi lúc xảy ra lỗi bất thường, hay khi cùng một đoạn mã chạy nhanh ở nơi này nhưng chậm ở nơi khác, bạn có thể giải thích nguyên nhân thay vì chỉ phỏng đoán.

Một dòng mã tôi viết sẽ di chuyển như thế nào bên trong con chip?

Từ đầu, bạn sẽ học về con đường dữ liệu (bus) giữa CPU, bộ nhớ và thiết bị ngoại vi bên trong chip, cùng các quy tắc của con đường đó (AMBA). Bắt đầu với APB đơn giản nhất, bạn sẽ lần lượt tìm hiểu AHB rồi đến AXI, đồng thời theo dõi sự phát triển của từng phần cho đến phiên bản mới nhất. Gồm 26 chương, thời lượng khoảng 4 giờ 30 phút.

Chúng ta sẽ kiểm chứng con đường bên trong SoC vốn chỉ được lướt qua bằng một hình minh họa trong sách kiến trúc máy tính, thông qua tài liệu gốc của tiêu chuẩn AMBA, tài liệu ARM Architecture và các con số đo được khi thay đổi cấu hình cache.

Thông tin về phương thức sản xuất

Khóa học này được thực hiện bằng quy trình sản xuất ứng dụng AI. Phần thuyết minh sử dụng giọng nói tổng hợp được huấn luyện dựa trên giọng thật của giảng viên; AI cũng được dùng để hỗ trợ soạn kịch bản và tạo hình ảnh vẽ tay trên màn hình. Giảng viên trực tiếp lên kế hoạch và kiểm duyệt nội dung, còn các kết quả đo được xác nhận qua việc chạy thử trên bo mạch STM32F429I-DISC1 thực tế.

Đã ghi giá trị vào thanh ghi, tại sao nó vẫn chưa thay đổi?

Tôi đã được học rằng mã được thực thi từng dòng, từ trên xuống dưới. Nhưng bên trong con chip, giá trị tôi ghi sẽ rời CPU, di chuyển dọc theo một con đường, đôi khi tạm chờ giữa chừng, và thứ tự cũng có thể thay đổi khi có yêu cầu khác. Nếu không hiểu con đường này, bạn sẽ đổ lỗi cho may rủi hoặc thời điểm khi gặp phải "lỗi kỳ lạ chỉ thỉnh thoảng mới xảy ra".

Trong khóa học này, chúng ta sẽ lần theo những con đường ấy bằng cách vẽ sơ đồ bằng tay từ đầu. Chúng ta sẽ cùng mở tài liệu gốc ghi rõ các quy tắc của những con đường, tô sáng các câu liên quan và kiểm chứng bằng những con số đo được trên bo mạch thực tế.

Từ con hẻm chậm đến đường cao tốc

Bên trong chip không chỉ có một con đường. Có con đường chậm và đơn giản dẫn đến thiết bị ngoại vi, con đường rộng dẫn đến bộ nhớ, và xa lộ nơi nhiều yêu cầu lưu thông cùng lúc. Bài giảng này sẽ lần lượt đi từ những con đường dễ nhất, để xem các quy tắc đã học ở phần trước thay đổi như thế nào trên những con đường tiếp theo.

STEP 1

Đường nhỏ APB

Ghi và đọc, chờ đợi

BƯỚC 2

Đường lớn AHB

Chạy chồng lấp, dùng chung

BƯỚC 3

Đường cao tốc AXI

Mã số, thứ tự, bảo mật

Vì sao lại là các tuyến kết nối bên trong chip ngay lúc này?

Chip ngày nay tích hợp nhiều lõi CPU, đủ loại bộ tăng tốc và vô số thiết bị ngoại vi. Quy tắc phổ biến chi phối các đường truyền dữ liệu giữa những bộ phận này là AMBA của Arm. Vì vậy, dù sử dụng loại chip nào, khi mở tài liệu hướng dẫn, bạn cũng sẽ bắt gặp sơ đồ những đường truyền này.

Khi ngày càng có nhiều công cụ viết mã thay bạn, giá trị của những nhà phát triển có thể giải thích vì sao đoạn mã đó hoạt động như vậy bên trong chip sẽ càng tăng.

Bạn sẽ học những điều này

Những con đường và quy tắc cơ bản bên trong chip

01 Bus là gì, con đường mà một dòng mã đi qua

02 Quan sát thời điểm đọc và ghi bộ nhớ trên xa lộ thời gian

03 Kiến thức cơ bản về AMBA: nhìn tên tín hiệu là hiểu ý nghĩa

04 APB: hai bước ghi và đọc một giá trị, chờ đợi và báo lỗi

05 Lý do ngắt đến hai lần, thao tác ghi phía bên kia cầu nối

Đường lớn, đường cao tốc và bảo mật

06 AHB: địa chỉ và dữ liệu được truyền chồng lấp, cách chỉ thay đổi 1 byte

07 Lỗi trỏ nhầm đường dây và quy tắc dùng chung đường truyền

08 AXI: Năm tuyến đường, vé số thứ tự và truyền dữ liệu theo lô

09 Vấn đề thứ tự mà volatile không thể ngăn chặn và khóa

10 Trạm kiểm soát bảo mật đọc được số 0 mà không gặp lỗi và những thay đổi trong phiên bản mới nhất

Những khoảng trống tôi nhận thấy trong 18 năm giảng dạy thực tế

Từ năm 2008, tôi đã giảng dạy cho các lập trình viên tại doanh nghiệp và tổ chức. Trong thời gian đó, tôi đã gặp nhiều lập trình viên viết code tốt nhưng lại không hiểu rõ về bộ nhớ và bus—nền tảng để code đó chạy.

  • Họ biết bus rộng hơn thì nhanh hơn, nhưng không thể giải thích tại sao.

  • Họ không thể giải thích lý do thực sự khiến bộ nhớ trên bo mạch không thể mở rộng tùy ý.

  • Vì không biết bộ điều khiển bộ nhớ làm nhiệm vụ gì, họ bị mắc kẹt ngay ở bước cấp nguồn lần đầu cho bo mạch mới chế tạo và khởi động bộ nhớ.

Những chỗ trống này không tách rời nhau. Khi hiểu được các đường đi bên trong chip, bạn có thể điền tất cả cùng một lúc. Số lượng đường địa chỉ quyết định giới hạn bộ nhớ có thể được định địa chỉ, còn số lượng đường dữ liệu quyết định lượng dữ liệu được truyền đi mỗi lần. Bộ điều khiển bộ nhớ là thông dịch viên chuyển ngôn ngữ của bus sang ngôn ngữ của bộ nhớ, vì vậy mã khởi động phải thông báo trước độ rộng và tốc độ của bộ nhớ được gắn vào. Và quan trọng hơn cả, bạn sẽ bắt đầu hình dung được toàn bộ cấu trúc kết nối của bo mạch chỉ trong nháy mắt.

Ngay cả câu hỏi tôi thường được hỏi nhất tại hiện trường, "Mã đúng mà sao đôi khi lại bất thường?", khóa học này cũng giải đáp bằng một sơ đồ đường đi bên trong chip và một con số trên bo mạch.

AMBA được giải thích bởi một nhà phát triển phần mềm, từ năm 2008

Tôi không phải là người thiết kế chip. Từ trước đến nay, hiện tại và cả sau này, tôi vẫn luôn là một nhà phát triển phần mềm nhúng. Chỉ là tôi rất quan tâm đến phần cứng nên đã tự học thêm hợp ngữ. Sau nhiều năm làm việc với bộ xử lý ARM, tôi dần tò mò về những con đường bên trong chip mà mã của mình đi qua — AMBA.

Năm 2008, muốn lưu lại đâu đó những gì mình đã tự học, tôi đăng loạt bài “Tìm hiểu về AMBA” lên blog. Đó là những bài viết giải thích từng bước các biểu đồ thời gian trong tài liệu quy chuẩn bằng hình minh họa, từ góc nhìn của người viết mã chạy trên mạch điện chứ không phải người thiết kế mạch. Vào thời điểm khó tìm được bài viết giải thích AMBA bằng tiếng Hàn một cách dễ hiểu, đến tận bây giờ, sau 17 năm, loạt bài ấy vẫn nhận được những bình luận cảm ơn từ độc giả đang học tập.

Bài giảng này mở rộng phần giải thích đó sang AXI và các tiêu chuẩn mới nhất, đồng thời bổ sung những con số đo được trên bo mạch thực tế để tạo thành một video mới. Vì vậy, nội dung được giải thích từ đầu đến cuối theo góc nhìn của lập trình viên.

Một số bình luận trong loạt bài trên blog, tên người viết đã được ẩn

Màn hình phần APB trong loạt bài blog “Tìm hiểu về AMBA” tháng 6 năm 2008

Dành cho những người biết viết code nhưng vẫn xem bên trong chip là một chiếc hộp đen

Ngay cả khi bạn mới nghe đến thuật ngữ bus thì cũng không sao. Chỉ cần bạn từng ghi và đọc giá trị trong thanh ghi là đủ. Sau khi học xong khóa này, bạn sẽ có thể tự đọc sơ đồ bus trong tài liệu chip mà trước đây vẫn thường bỏ qua vì nghĩ đó là "chuyện phần cứng".

Khóa học này cũng dành cho những người thiết kế chip. Khóa học cho bạn thấy từ góc nhìn ngược lại cách phần mềm sử dụng phần cứng do bạn tạo ra. Khi thấy một tín hiệu báo lỗi hay một bộ đệm tạm giữ thao tác ghi có thể gây ra lỗi gì cho lập trình viên, bạn sẽ suy nghĩ kỹ hơn về những điều cần cân nhắc khi thiết kế và những gì cần ghi trong tài liệu hướng dẫn.

Điểm đặc biệt của khóa học này

Theo dấu ba lỗi kỳ lạ

Một bo mạch thỉnh thoảng nhận ngắt hai lần, một lượt truyền gửi dữ liệu chưa được điền đầy đủ trước, một giá trị được đọc thành 0 dù không có lỗi. Lần lượt tháo gỡ từng sự cố để học các quy tắc.

Giải thích bằng cách vừa vẽ hình minh họa bằng tay

Trên trang vở ô ly trắng, vừa dùng bút vẽ đường đi và tín hiệu vừa giải thích. Hình vẽ dần được bổ sung cùng với lời nói, giúp cả những người mới xem lần đầu cũng không bị lạc mất mạch nội dung.

Cùng với tài liệu gốc

Tô sáng các câu gốc có ghi quy tắc và lưu lại nguồn tham khảo.

Kiểm chứng trên bo mạch thực tế

Chúng tôi giải thích bằng những con số đo được trên bo mạch STM32.

cho đến phiên bản mới nhất

Cuối mỗi phần, hãy xem xét kết nối đến APB5·AHB5·AXI5.

Màn hình bài giảng thực tế

Tại sao đã lấp đầy bộ đệm mà phần phía sau vẫn là giá trị cũ? Hai lần ghi được minh họa bằng xe tải và xe máy

Vì sao đọc được số 0 mà không có lỗi, nhãn dán trên xe và trạm kiểm soát bên trong chip

Nếu nối riêng từng thiết bị thì cần bao nhiêu dây? 4 thiết bị cần 6 dây, 8 thiết bị cần 28 dây

Cần bao nhiêu chu kỳ xung nhịp để đọc flash một lần? Con số đo trực tiếp trên bo mạch

APB2 có phải là APB của AMBA phiên bản 2 không? Cái bẫy ẩn trong con số ở tên gọi

Đã xóa cờ rồi, tại sao ngắt vẫn xảy ra thêm một lần nữa? Lệnh ghi đang qua cầu và phản hồi đã hoàn tất trước

Chỉ ghi 1 byte mà cả 4 byte đều thay đổi, không hề có lỗi nào

Cùng sao chép 1 KB, vì sao mất 6155 chu kỳ xung nhịp so với 696, chênh lệch gần gấp chín lần này do đâu?

Ngã tư bên trong chip nơi CPU và DMA cùng đi qua: ai sẽ bật đèn giao thông?

Bus và chip bộ nhớ nói hai ngôn ngữ khác nhau, người phiên dịch ở giữa

Nếu hai bên chờ đối phương hành động trước, các tuyến đường bên trong chip sẽ hoàn toàn tê liệt

Yêu cầu được gửi trước lại trở về muộn nhất, nhưng không vi phạm quy tắc

Dòng mà HardFault chỉ đến không phải là thủ phạm; PC trỏ đến dòng thứ sáu sau lệnh lưu

Bảng đối chiếu giúp chọn tín hiệu cần kiểm tra chỉ dựa trên triệu chứng, kết luận của ba vụ việc

Môi trường thực hành

Bo mạch được sử dụng trong khóa học

  • STM32F429I-DISC1 (Cortex-M4)

  • Đo trực tiếp số chu kỳ, số lần ngắt và lỗi bus trên bo mạch.

Ngay cả khi không có bo mạch

  • Tất cả kết quả đo đều được trình bày trong video.

  • Các tính năng AXI và bảo mật không có trên bo mạch sẽ được hướng dẫn bằng hình minh họa và mã ví dụ.

Câu hỏi thường gặp

Q. Tôi hoàn toàn không biết về phần cứng hay mạch điện thì có thể học được không?

Có. Chúng ta sẽ bắt đầu từ câu hỏi bus là gì. Khóa học không đề cập đến sơ đồ mạch hay ngôn ngữ thiết kế, mà tập trung vào cách một dòng mã mà lập trình viên viết được thực thi bên trong chip như thế nào. Chỉ cần bạn từng ghi và đọc giá trị của thanh ghi là đủ.

Q. Có nhất thiết phải có bo mạch không?

Không cần. Tất cả kết quả đo trên bo mạch đều được trình bày trong video. Bo mạch được sử dụng trong khóa học là STM32F429I-DISC1; các chức năng AXI và bảo mật không có trên bo mạch sẽ được giải thích bằng hình minh họa và mã ví dụ.

Q. Tôi có cần đọc tài liệu gốc bằng tiếng Anh không?

Tài liệu gốc được hiển thị trên màn hình, những câu cần thiết sẽ được tô sáng và giải thích ý nghĩa bằng tiếng Hàn. Bạn có thể theo dõi bài học mà không cần đọc riêng phần tiếng Anh; sau khi khóa học kết thúc, bạn sẽ quen với việc tự tìm và đọc những phần cần thiết.

Q. Giọng thuyết minh có phải là giọng AI không?

Có. Đây là giọng nói tổng hợp được huấn luyện từ chính giọng của giảng viên. Kịch bản và nội dung do giảng viên trực tiếp lên kế hoạch và kiểm duyệt; các màn hình đo lường là kết quả đã được chạy và xác minh trên bo mạch thực tế.

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Lập trình viên biết viết mã nhưng bên trong con chip vẫn là một hộp đen.

  • Các nhà phát triển firmware, driver và hệ thống từng thử ghi giá trị vào thanh ghi và đọc giá trị từ đó.

  • Dành cho người mới bắt đầu tìm hiểu về cấu trúc bên trong chip và bus.

Cần biết trước khi bắt đầu?

  • Cơ bản về ngôn ngữ C

  • Kinh nghiệm ghi và đọc giá trị vào thanh ghi

Xin chào
Đây là guileschool

Xác minh sự nghiệp

3,632

Học viên

263

Đánh giá

281

Trả lời

4.7

Xếp hạng

9

Các khóa học

Tôi đã học chuyên ngành Kỹ thuật Điện tử tại Đại học Inha và làm việc với tư cách là nhà phát triển phần mềm nhúng.

Từ năm 2008, tôi đã giảng dạy trực tiếp tại các cơ sở trong 18 năm. Tôi đã đào tạo các nhà phát triển tại những doanh nghiệp và tổ chức như Samsung Electronics, LG Electronics, SK hynix, Hyundai Mobis, LIG D&A, Đại học Quốc gia Seoul, đồng thời hệ thống hóa những kinh nghiệm đó thành giáo trình giảng dạy.

『RTOS』(2008), 『Linux Shell』(2018), 『FreeRTOS』(2019), 『Cortex-M』(2022), 『Hệ thống nhúng dựa trên bootloader』(2023)

Kênh YouTube Guileschool (https://www.youtube.com/@guileschool): Các bài giảng về hệ thống nhúng và phát triển phần mềm

Tôi cũng đã nghiên cứu về tự động hóa trên máy Mac được 15 năm. Tôi hướng dẫn cách giảm các công việc lặp đi lặp lại bằng Keyboard Maestro và AppleScript, đồng thời trực tiếp phát triển và bán plugin tự động hóa Greenlight cho Final Cut Pro. Các công cụ do tôi tự tạo được công khai trên GitHub (https://github.com/guileschool).

YouTube CaptainMacBot (https://www.youtube.com/@captainmacbot): Cách sử dụng AI và tự động hóa trên máy Mac

Vui lòng gửi yêu cầu về khóa học và các thắc mắc khác đến guileschool@gmail.com.

Thêm

Chương trình giảng dạy

Tất cả

26 bài giảng ∙ (4giờ 30phút)

Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Chưa có đủ đánh giá.
Hãy trở thành tác giả của một đánh giá giúp mọi người!

Khóa học khác của guileschool

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!

Ưu đãi có thời hạn

2.419.200 ₫

34%

3.701.668 ₫